PHP:动态调用METHOD

时间:2014-10-03 12:42:30

标签: php dynamic-programming

methosHere是对我创建的类的调用:

Utils::search($idRole, $this->roles, 'getId');
在Utils中

,搜索方法:

public static function search ($needle, $haystack, $getter) {
    $found = false;
    $i = 0;

    while($i < count($haystack) || $found) {
        $object = $haystack[$i];

        if($object->$getter === $needle) {
            $found = true;
        }
    }

    return $found;
}

haystack是一个Role对象数组。以下是Role类的一部分:

class Role
{
  private $id;
  private $nom;

  public function __construct($id = 0, $nom = null) {
    $this->id = $id;
    $this->nom = $nom;
  }

  public function getId()
  {
    return $this->id;
  }
}

运行$object->$getter部分我有一个例外:

Undefined property: Role::$getId

我认为这是动态调用属性的方法..我做错了什么?

谢谢

2 个答案:

答案 0 :(得分:3)

尝试这种方式:

第一个元素是对象,第二个是方法。

call_user_func(array($object, $getter))

您也可以在不使用 call_user_func

的情况下执行此操作
$object->{$getter}();

或者:

$object->$getter();

答案 1 :(得分:2)

您尝试调用private范围内的类属性。

您为此属性创建了一个getter方法(Role::getId())。现在你必须调用该方法而不是属性本身(它是私有的,不能在保存它的Role类实例之外访问)。

所以你必须使用call_user_func()

$id = call_user_func(array($object, $getter));