2017-08-28 162 views
-1

類call_user_func這是很基本的問題,我有這個類,說我可以定義自己的處理程序,這將改變在下面的例子中callName()功能:定義處理程序在

class MyClass 
{ 
protected static $callHandler; 

public static function callName($name){ 
     if (static::$callHandler) { 
      return call_user_func(static::$callHandler, $name); 
     } 
    print $name; 
    } 
} 

我知道我可以做這個: $ class = new MyClass(); $ class-> callName(「Jonny」);

但是,如何在call_user_func中定義我自己的$ callhandler並更改結果?

+1

'MyClass的:: callName()'是[靜態方法](http://php.net/manual/en/language.oop5.static.php)。你應該把它叫做MyClass :: callName(「Jonny」)'。 – axiac

+0

感謝您的回答@axiac,告訴我如何定義$ callHandler – San

+0

接收一個參數可以作爲'$ callHandler'任何功能。儘管如此,你必須添加一個(靜態)方法給你的類來設置它。 – axiac

回答

0

這些都是來我心中的方式,你應該選擇最合適的一個:

  • 檢查的類的方法休息,如果某種二傳手,初始化或魔法setter方法的存在,用它。
  • 在此延伸MyClass並設置$callHandler
  • 擴展MyClass,並創建一些靜態初始化函數,你會打電話給事後的設定值。
  • 使用反射。

你可以檢查這些SO問題,他們很相似:How to initialize static variablesDynamically populating a static variable in PHP