Как вызвать 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
139 +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 Апр в 20:50
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 83 887 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир