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
}