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
我认为这是动态调用属性的方法..我做错了什么?
谢谢
答案 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));