php 中的动态 class 方法名称
Dynamic class method name in php
我正在使用 graphql-php. There is an example 开发一个项目,它建议创建一个 class 像这样:
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());
}
}
稍后我可以像这样使用这个 class 方法:
Types::page()
或 Types::category()
这很好用。但是,我认为这是一种反模式,可以优化。随着项目的增长,类似功能和私有 class 字段的数量也在增长,这变得很不方便。
有没有什么方法可以重构 class,这样我就不必为每种类型手动添加一个函数,但仍然像现在这样调用 class 方法? (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
}
我正在使用 graphql-php. There is an example 开发一个项目,它建议创建一个 class 像这样:
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());
}
}
稍后我可以像这样使用这个 class 方法:
Types::page()
或 Types::category()
这很好用。但是,我认为这是一种反模式,可以优化。随着项目的增长,类似功能和私有 class 字段的数量也在增长,这变得很不方便。
有没有什么方法可以重构 class,这样我就不必为每种类型手动添加一个函数,但仍然像现在这样调用 class 方法? (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
}