PHP允許你調用了一些事情,如果他們的功能 - 這包括:
- 函數名作爲字符串(例如
"myFunc"
)
- 包含函數名作爲第一個元素和參數數組作爲第二元件(例如
["myFunc", ["arg1", "arg2"]]
)
- 陣列containin陣列g的對象作爲第一元件和參數數組作爲第二元件(例如
[new MyClass(), ["arg1", "arg2"]]
)的實施__invoke()
魔術方法
- 瓶蓋類
- 實例/匿名功能
所有這些可以是由callable
typehint表示。因此,實現你的功能,例如:
tryTo(callable $callable) {
try {
$callable();
catch(\Exception $ex) {
return false;
}
}
將允許您使用tryTo()
爲什麼 PHP考慮調用和執行,無論你通過可用於調用一個函數。
所以下面的工作:
tryTo('myFunc'); // Equivalent to myFunc();
tryTo('MyClass::myFunc'); // Equivalent to MyClass::myFunc();
tryTo(['myFunc', ['myArg', 'myOtherArg']]; // Equivalent to myFunc('myArg', 'myOtherArg');
tryTo([new MyClass(), 'myFunc']); // Equivalent to (new MyClass())->myFunc();
tryTo(function() { echo 'test'; }); // executes whatever closure you pass
你可以看到here以獲取更多信息。
這就是說,我認真質疑用例這樣的一個功能 - 通常,異常應該不會發生,除非什麼是錯的,像打開你到靜音故障使用功能。最起碼,你應該記錄發生的,所以你可以看到,出事了異常,但在我看來,無論他們是相關的,你應該處理特殊情況例外。然而,這完全是一個完全不同的討論,並沒有回答你的問題。
除了缺少美元符號,這段代碼有什麼問題? – trincot
當然,您可能還需要考慮將參數傳遞給您要調用的函數 –
是的,我想用參數調用try-catch塊內的函數。 –