динамическое программирование — PHP: вызывать МЕТОД динамически

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

Я думал, что это был способ динамического вызова свойства .. Что я делаю не так?

благодарю вас

0

Решение

попробуйте это способами:

1-й элемент — это объект, а 2-й — метод.

call_user_func(array($object, $getter))

Вы также можете сделать это без call_user_func:

$object->{$getter}();

Или же:

$object->$getter();
3

Другие решения

Вы пытаетесь вызвать свойство класса, которое находится в private объем.

Вы создали метод получения для этого свойства (Role::getId()). Теперь вам нужно вызывать этот метод, а не само свойство (которое является закрытым и недоступным вне экземпляра класса Role, который его содержит).

Так что вы должны использовать call_user_func():

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

По вопросам рекламы [email protected]