考慮到如下界面:PHP通話時間通過引用不可避免?
interface ISoapInterface {
public static function registerSoapTypes(&$wsdl);
public static function registerSoapOperations(&$server);
}
以下代碼:
$soapProvider = array("FilePool", "UserList");
foreach($soapProvider as $provider) {
call_user_func(array($provider, "registerSoapTypes"), &$server->wsdl);
call_user_func(array($provider, "registerSoapOperations"), &$server);
}
FilePool
和UserList
都實現ISoapInterface
。
PHP會抱怨的foreach內的兩個來電指出:
通話時傳遞的引用已被棄用
所以我看這個信息了,the documentation似乎相當清楚如何解決這個問題。從實際呼叫中刪除&符號。
所以我改變了我的代碼看起來像這樣:
$soapProvider = array("FilePool", "UserList");
foreach($soapProvider as $provider) {
call_user_func(array($provider, "registerSoapTypes"), $server->wsdl);
call_user_func(array($provider, "registerSoapOperations"), $server);
}
現在PHP抱怨
參數1至FilePool是::預期爲基準registerSoapTypes,值給出
參數1至FilePool是:: registerSoapOperations預計將作爲參考,給出的值
除此之外,功能現在已被打破。所以這顯然不能解決問題。
如果我使用$ provider-> registerSoapTypes,我得到一個非對象的成員函數registerSoapTypes的調用。這些方法是靜態的。如果我沒有記錯的話,那就是最初將我引向call_user_func的原因。 – 2010-10-19 16:18:46
@gencha我錯過了'static';會相應地更新我的答案。 – meagar 2010-10-19 16:25:51
工程很好,代碼看起來更好。歡呼聲 – 2010-10-19 16:32:59