2014-10-22 50 views
1

由于__callStatic在php 5.3中引入,创建新类而不是工厂方法时使用它是一个好主意吗?PHP __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); 
    } 
} 

回答

4

这个问题在很大程度上定义自以为是,所以我只能给一个“最佳实践”的答案。

不要。虽然可能有些事情没有问题,但您实际上正在混淆您的代码。无论谁来维护代码,都不会期待这种行为,因为它不符合任何IT教育所教授的范例。您的代码将难以维护,记录和分享,因为您做出了非常规的选择,虽然完全有效并且性能卓越,但不会为接受的最佳做法带来任何好处。

坚持普遍接受的标准和开发商后,你会感激。

0

这似乎可行,但你也可以让你的类扩展门面像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()