Я работаю над проектом, используя graphql-PHP. Есть пример который предлагает создать такой класс:
use Project\CategoryType;
use Project\PageType;
class Types {private static $page;
private static $category;
public static function page() {
return self::$page ?: (self::$page = new PageType());
}
public static function category() {
return self::$category ?: (self::$category = new CategoryType());
}
}
Позже я могу использовать методы этого класса так:
Types::page()
или же Types::category()
Это отлично работает. Тем не менее, я думаю, что это анти-паттерн и может быть оптимизирован. По мере роста проекта растет число аналогичных функций и полей частного класса, и это становится неудобным.
Есть ли способ реорганизовать класс, поэтому мне не нужно вручную добавлять функцию для каждого типа, но все равно вызывать методы класса, как я это делаю сейчас? (Types::page()
).
Пожалуйста, используйте магические методы __callStatic или __call. http://php.net/manual/en/language.oop5.overloading.php#object.callstatic
public static function __callStatic($name, $arguments)
{
//$name is your type
}
Других решений пока нет …