我正在使用graphql-php开展项目。有an example建议创建一个这样的类:
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 :(得分:1)
请使用__callStatic或__call魔术方法。 http://php.net/manual/en/language.oop5.overloading.php#object.callstatic
public static function __callStatic($name, $arguments)
{
//$name is your type
}