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

21 Авг 2019 в 07:05
206 +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
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир