动态类方法在php中的名称
问题描述:
我正在使用graphql-php来处理项目。有an example提示创建一个类是这样的:动态类方法在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
}
是的,这似乎是关键。非常感谢。请您发布答案,以便我可以接受它,或者我应该自己发布完整的解决方案吗? – Ssey
欢迎。很高兴听到它的帮助。 – tan