php中的动态类方法名称

时间:2017-10-10 07:46:19

标签: php class design-patterns graphql graphql-php

我正在使用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())。

1 个答案:

答案 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
}