动态类方法在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())。

+0

是的,这似乎是关键。非常感谢。请您发布答案,以便我可以接受它,或者我应该自己发布完整的解决方案吗? – Ssey

+0

欢迎。很高兴听到它的帮助。 – tan

请使用__callStatic或__call魔术方法。 http://php.net/manual/en/language.oop5.overloading.php#object.callstatic

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