2014-10-22 32 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()