PHP\uuu调用静态作为工厂
既然PHP5.3中引入了_callStatic,那么在创建新类而不是工厂方法时使用它是一个好主意吗 例如,$user=Model::user而不是$user=Model::factory'user',然后: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
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