如何将对象方法的引用传递给变量? 我不知道,尝试了一切。
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
答案 0 :(得分:2)
您不必传递对该方法的引用。由于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)解释得更多。
答案 1 :(得分:1)
PHP通过callable机制强制执行引用功能。
如果要保留对方法的引用以供以后调用,则可以执行此操作
$obj = new CObject();
$myMethod = array($obj,'method');
稍后使用call_user_func调用它:
$result = call_user_func($myMethod,$someArgument);
可调用引用不封装方法,而是在类的特定实例的上下文中调用该方法(在本例中为$ obj)。
或者,有一个reflection 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
}
答案 2 :(得分:0)
第二个回答:
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');
你忘记了;