Как вызвать public метод в php через объектные литералы? class A {
public function a() {
echo "a";
}
}
class B extends A {
public function controll($method) {
$methods = [
"returnA" => $this -> a()
]; return $methods[$method];
}
}
$b = new B;
$b -> controll("returnA");
Так вот вопрос:
Это будет работать, только если в $methods только один метод, если же больше, то они вызываются сразу после инициализации массива. Как сделать так, чтобы можно было вызывать их только при необходимости, не используя switch и условные операторы.

27 Фев 2021 в 19:50
186 +1
0
Ответы
1

Для вызова методов через объектные литералы в PHP можно воспользоваться анонимной функцией (замыканием). Пример:

class A {
public function a() {
echo "a";
}
}
class B extends A {
public function controll($method) {
$methods = [
"returnA" => function() {
$this->a();
}
];
if (array_key_exists($method, $methods)) {
$methods[$method]();
} else {
echo "Method not found";
}
}
}
$b = new B;
$b->controll("returnA");

В этом примере метод "returnA" представлен в объектном литерале анонимной функцией, которая вызывает метод a() объекта. При вызове метода controll() передается имя метода, которое проверяется наличие в объектном литерале, и если присутствует, соответствующая анонимная функция вызывается.

17 Апр 2024 в 20:50
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир