-1

如何将对象方法的引用传递给变量?我不知道,什么都试过了。

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
4

3 回答 3

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_funccallable)解释更多。

于 2013-09-18T18:52:18.183 回答
1

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
}
于 2013-09-18T19:07:34.170 回答
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');

你忘了一个;

于 2013-09-18T18:25:24.927 回答