Как отследить вызов метода объекта PHP? Есть магический метод __call который вызывается если метода нету (для статических __callStatic).
А как правильно сделать примерно такую штуку: если я пытаюсь вызвать любой метод объекта, то сначала запустить команду createInstance() - создать синглтон, а уже потом выполнить саму команду. Или это много думаю, все проще?
Неужели единственный способ - это в каждое объявление функции прописывать static::createInstance() ?

21 Авг 2019 в 07:05
179 +1
0
Ответы
1

Для реализации задачи вы можете использовать магический метод __call вместе с проверкой на наличие экземпляра объекта. Ниже приведен пример, как это можно сделать:

class MyClass {
private static $instance;
public static function createInstance() {
if (!self::$instance) {
self::$instance = new MyClass();
}
}
public function __call($name, $arguments) {
self::createInstance();
if (method_exists($this, $name)) {
return call_user_func_array([$this, $name], $arguments);
} else {
throw new Exception("Method {$name} does not exist");
}
}
public function myMethod() {
echo "Method has been called";
}
}
$obj = new MyClass();
$obj->myMethod(); // Результат: "Method has been called"

Таким образом, при вызове любого метода объекта MyClass будет сначала создаваться инстанс с помощью метода createInstance(), а затем вызываться необходимый метод. Таким образом, вам не нужно будет каждый раз вызывать createInstance() в отдельных методах.

20 Апр 2024 в 13:07
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 96 255 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир