幾個月前,我已閱讀了有關每次調用靜態方法時都調用的PHP函數,類似於實例化類的實例時調用的__construct
函數。但是,我似乎無法找到哪個函數在PHP中處理此功能。有這樣的功能嗎?PHP中靜態方法的構造函數替代
5
A
回答
6
您可以__callStatic()玩,做這樣的事情:
class testObj {
public function __construct() {
}
public static function __callStatic($name, $arguments) {
$name = substr($name, 1);
if(method_exists("testObj", $name)) {
echo "Calling static method '$name'<br/>";
/**
* You can write here any code you want to be run
* before a static method is called
*/
call_user_func_array(array("testObj", $name), $arguments);
}
}
static public function test($n) {
echo "n * n = " . ($n * $n);
}
}
/**
* This will go through the static 'constructor' and then call the method
*/
testObj::_test(20);
/**
* This will go directly to the method
*/
testObj::test(20);
使用此代碼由「_」將運行靜態的構造函數'之前第一任何方法。 這只是一個基本的例子,但您可以使用__callStatic
,但它對您更好。
祝你好運!
1
可以__callStatic()是你所指的方法嗎?我剛剛發現這個PHP手冊中:
http://www.php.net/manual/en/language.oop5.overloading.php#language.oop5.overloading.methods
也許沒有,不過,因爲它似乎是一個神奇的方法來處理不確定的靜態方法調用...
+0
恐怕這不是我正在尋找的方法。感謝您的回覆。 –
3
的__callStatic()被調用每次你調用不存在的類的靜態方法。
+0
前段時間,我在PHP手冊中偶然發現了這種方法,但是,正如您所提到的,只有在調用一個不存在的靜態方法時纔會調用它。 –
相關問題
- 1. Ninject和靜態構造函數方法
- 2. PHP:從父類的靜態方法調用子構造函數
- 3. 靜態構造方法vs構造函數
- 4. Java - 靜態構造函數
- 5. Objective C靜態構造函數與動態構造函數
- 6. 替代構造函數的方法中的'this.variable'
- 7. VB.NET中的靜態構造函數
- 8. C中的靜態構造函數
- 9. PHP中類的靜態方法/函數
- 10. 在構造函數中調用靜態方法 - CoffeeScript
- 11. 構造函數和靜態函數
- 12. 執行從Javascript中的構造函數數組中訪問構造函數的父節點的「靜態」方法
- 13. 靜態函數中@Value註釋的替代方法
- 14. PHP的構造函數和靜態函數
- 15. 具有靜態方法和私有構造函數的final類?
- 16. Database.SetInitializer()在靜態構造函數中?
- 17. 靜態構造函數可以降低訪問靜態方法的性能嗎?
- 18. xUnit runner如何處理具有靜態類構造函數的靜態方法?
- 19. 公共構造函數和靜態構造函數
- 20. C#實例構造函數與靜態構造函數
- 21. PHP類的構造函數和方法
- 22. 靜態構造函數以某種方式阻止實例構造函數
- 23. PHP動態方法構造
- 24. 構造一類的靜態方法
- 25. 動態創建具有構造函數的類,該構造函數調用另一個靜態類方法
- 26. 靜態方法或OO替代方法?
- 27. Php繼承,動態屬性和新的靜態()構造函數
- 28. 靜態構造函數和擴展方法
- 29. 有關靜態構造函數,方法和字段
- 30. C++模板,靜態方法和構造函數
這不是我所希望的,但我認爲它與我所尋找的最接近。謝謝,阿迪。 –
沒問題,希望我幫忙。 –