> Le 18 janv. 2023 à 19:33, Alex Wells <autau...@gmail.com> a écrit : > > Classes and methods is the expected way of implementing standard library in > an OO language. New APIs (such as the new Random api) use OO instead of > functions and it makes more sense to use OO in this case too: there's likely > a place for other methods too, like toBase(int $otherBase) etc. It would also > be possible to use overloaded operators if needed.
Fortunately, PHP is not (yet) a language where every problem requires the use and manipulation of objects implementing a generalised and unified solution. I guess that the OO way of writing: ```php function next_alpha_id(): string { static $x = 'zz'; return ++$x; } function next_num_id(): int { static $x = 0; return ++$x; } $my_id = next_alpha_id(); $my_other_id = next_num_id(); ``` would resemble to the following, except that `mixed` should be replaced by the use of generics. For brevity, I left the mandatory interfaces as exercise to the reader. ```php class IdGenerator { protected mixed $current; public function __construct( protected readonly IdGeneratorType $type , protected readonly IdGeneratorDirection $direction , mixed $start ) { $this->current = $start; } public function next(): mixed { // implementation... } } enum IdGeneratorType { case alphabetic; case numeric; } enum IdGeneratorDirection { case positive; case negative; } final class StandardGlobalAlphabeticIdGenerator { private static IdGenerator $id_generator; public static function get(): IdGenerator { return self::$id_generator ?? new IdGenerator( type: IdGeneratorType::alphabetic , direction: IdGeneratorDirection::positive , start: 'aaa' ); } } final class StandardGlobalNumericIdGenerator { private static IdGenerator $id_generator; public static function get(): IdGenerator { return self::$id_generator ?? new IdGenerator( type: IdGeneratorType::numeric , direction: IdGeneratorDirection::positive , start: 1 ); } } $my_id = StandardGlobalAlphabeticIdGenerator::get()->next(); $my_other_id = StandardGlobalNumericIdGenerator::get()->next(); ``` —Claude