Имя метода динамического класса в переполнении стека

Я работаю над проектом, используя 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()).

0

Решение

Пожалуйста, используйте магические методы __callStatic или __call. http://php.net/manual/en/language.oop5.overloading.php#object.callstatic

public static function __callStatic($name, $arguments)
{
//$name is your type
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]