metasHere — вызов к классу, который я создал:
Utils::search($idRole, $this->roles, 'getId');
в утилите, метод поиска:
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;
}
Стог сена — это массив объектов 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
Я думал, что это был способ динамического вызова свойства .. Что я делаю не так?
благодарю вас
попробуйте это способами:
1-й элемент — это объект, а 2-й — метод.
call_user_func(array($object, $getter))
Вы также можете сделать это без call_user_func:
$object->{$getter}();
Или же:
$object->$getter();
Вы пытаетесь вызвать свойство класса, которое находится в private
объем.
Вы создали метод получения для этого свойства (Role::getId()
). Теперь вам нужно вызывать этот метод, а не само свойство (которое является закрытым и недоступным вне экземпляра класса Role, который его содержит).
Так что вы должны использовать call_user_func()
:
$id = call_user_func(array($object, $getter));