【问题标题】:PHP __callStatic as a factory [closed]PHP __callStatic 作为工厂 [关闭]
【发布时间】:2014-10-22 10:58:18
【问题描述】:

既然__callStatic 是在 php 5.3 中引入的,那么在创建新类而不是工厂方法时使用它是一个好主意吗?

例如,$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);
    }
}

【问题讨论】:

    标签: php oop factory


    【解决方案1】:

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

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

    坚持普遍接受的标准,开发者会心存感激。

    【讨论】:

      【解决方案2】:

      这似乎可行,但你也可以让你的类像 Laravel 那样扩展一个 Facade:

      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() 时代码更明确

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-01-12
        • 1970-01-01
        • 1970-01-01
        • 2015-03-24
        • 1970-01-01
        • 1970-01-01
        • 2012-04-10
        • 2018-02-07
        相关资源
        最近更新 更多