如何将对象方法的引用传递给变量?我不知道,什么都试过了。
class CObject
{
public function method($param)
{
return $param;
}
}
$obj = new CObject();
$a = $obj->method; //doesn't work, here I was trying to pass method reference of object to this variable
如何将对象方法的引用传递给变量?我不知道,什么都试过了。
class CObject
{
public function method($param)
{
return $param;
}
}
$obj = new CObject();
$a = $obj->method; //doesn't work, here I was trying to pass method reference of object to this variable
您不必传递对该方法的引用。由于 PHP 处理回调的方式,您所需要的只是对象引用和字符串形式的方法名称。
class AnObject
{
public function aMethod( $param )
{
return $param . ' was here';
}
}
$method = 'aMethod';
$object = new AnObject( );
$param = 'fourty two';
// outputs: string(19) "fourty two was here"
var_dump( $object->{$method}($param) );
// also outputs: string(19) "fourty two was here"
var_dump( call_user_func( array( $object, $method ), $param ) );
如果您尝试传递对回调的引用,您很可能正在寻找这个(根据您的原始示例):
$a = array( $object, 'method' );
然后您可以使用参数调用该方法:
$result = call_user_func( $a, 'my parameter' );
文档(call_user_func和callable)解释更多。
PHP 通过可调用机制强制引用函数。
如果您想保留对方法的引用以供以后调用,您可以简单地执行此操作
$obj = new CObject();
$myMethod = array($obj,'method');
稍后使用call_user_func调用它:
$result = call_user_func($myMethod,$someArgument);
可调用引用不封装方法,而是在类的特定实例(在本例中为 $obj)的上下文中对方法的调用。
或者,有一个反射 API可用于引用方法(很像 Java)。
$obj = new CObject();
$cObjClass = new ReflectionClass($obj);
try{
$myMethod = $cObjClass->getMethod('method');
$myMethod->invoke($obj,$someArgument);
}catch(ReflectionException $e){
//the method does not exist
}
第二个答案:
class CObject
{
public function method($param)
{
return $param;
}
}
$obj = new CObject();
$a = $obj->method('value');
echo $a;
经典错误:
$a = function($param) { return $param; }; //lambda function passed to variable
echo $a('param');
你忘了一个;