PHP调用时间传递不可避免?

Der*_*ler 3 php pass-by-reference

给出以下界面:

interface ISoapInterface {
  public static function registerSoapTypes( &$wsdl );
  public static function registerSoapOperations( &$server );
}
Run Code Online (Sandbox Code Playgroud)

以下代码:

$soapProvider = array( "FilePool", "UserList" );
foreach( $soapProvider as $provider ) {
  call_user_func( array( $provider, "registerSoapTypes" ), &$server->wsdl );
  call_user_func( array( $provider, "registerSoapOperations" ), &$server );
}
Run Code Online (Sandbox Code Playgroud)

FilePoolUserList实施ISoapInterface.

PHP会抱怨foreach中的两个调用声明:

已弃用调用时传递引用

所以我看了那个消息,文档似乎很清楚如何解决这个问题.从实际呼叫中删除&符号.
所以我改变了我的代码看起来像这样:

$soapProvider = array( "FilePool", "UserList" );
foreach( $soapProvider as $provider ) {
  call_user_func( array( $provider, "registerSoapTypes" ), $server->wsdl );
  call_user_func( array( $provider, "registerSoapOperations" ), $server );
}
Run Code Online (Sandbox Code Playgroud)

现在PHP抱怨

参数1到FilePool :: registerSoapTypes应该是引用,给定的值
参数1到FilePool :: registerSoapOperations有待参考,给出的值

除此之外,功能现已破裂.所以这显然不是解决方案.

mea*_*gar 6

来自call_user_func:

请注意,call_user_func()的参数不通过引用传递.

要调用静态方法,您可以使用Class::method()语法,为Class和/或method部分提供变量:

$soapProvider = array( "FilePool", "UserList" );
foreach( $soapProvider as $provider ) {
  $provider::registerSoapTypes($server->wsdl);
  $provider::registerSoapOperations($server);
}
Run Code Online (Sandbox Code Playgroud)