Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP\uuu调用静态作为工厂_Php_Oop_Factory - Fatal编程技术网

PHP\uuu调用静态作为工厂

PHP\uuu调用静态作为工厂,php,oop,factory,Php,Oop,Factory,既然PHP5.3中引入了_callStatic,那么在创建新类而不是工厂方法时使用它是一个好主意吗 例如,$user=Model::user而不是$user=Model::factory'user',然后: public static function __callStatic($name, $arguments) { $class_name = 'Model_' . $name; if( empty($arguments) ) { return new

既然PHP5.3中引入了_callStatic,那么在创建新类而不是工厂方法时使用它是一个好主意吗

例如,$user=Model::user而不是$user=Model::factory'user',然后:

public static function __callStatic($name, $arguments)
{
    $class_name = 'Model_' . $name;

    if( empty($arguments) )
    {
        return new $class_name();
    }
    else
    {
        $reflector = new ReflectionClass($class_name);

        return $reflector->newInstanceArgs($arguments);
    }
}

这个问题从定义上讲是非常固执己见的,因此我只能给出一个“最佳实践”的答案

不要。虽然有些事情是可能的,但实际上您正在混淆代码。无论是谁在您之后维护代码,都不会期望出现这种行为,因为它不符合任何it教育中所教授的范例。您的代码将更难维护、记录和共享,因为您做出了一个非常规的选择,尽管它完全有效且性能良好,但与公认的最佳实践相比,它没有任何好处


坚持公认的标准,开发人员会感激的。

这个问题从定义上讲是非常固执己见的,因此我只能给出一个“最佳实践”的答案

不要。虽然有些事情是可能的,但实际上您正在混淆代码。无论是谁在您之后维护代码,都不会期望出现这种行为,因为它不符合任何it教育中所教授的范例。您的代码将更难维护、记录和共享,因为您做出了一个非常规的选择,尽管它完全有效且性能良好,但与公认的最佳实践相比,它没有任何好处


坚持普遍接受的标准,开发人员会感激的。

这似乎是可行的,但你也可以让你的类像Laravel那样扩展门面:

class Facade
{
    static public function create()
    {
        if( empty($arguments) )
        {
            return new static;
        }
        else
        {
            $reflector = new ReflectionClass(get_called_class());

            return $reflector->newInstanceArgs(func_get_args());
        }
    }
}

class User extends Facade
{

}

我的意思是,当User::create看起来可行时,代码更加明确,但是您也可以让您的类像Laravel那样扩展外观:

class Facade
{
    static public function create()
    {
        if( empty($arguments) )
        {
            return new static;
        }
        else
        {
            $reflector = new ReflectionClass(get_called_class());

            return $reflector->newInstanceArgs(func_get_args());
        }
    }
}

class User extends Facade
{

}
IMHO,当User::create