Не исполняется магический метод__get() в PHP, что делать? Всем привет!
Изучаю PHP дошел до ООП, где авто видеокурсов рассматривает магические методы __get() и __set()
Проблема возникла именно с методом __get(), а именно дело в том, что он не исполняется.
Автор утверждает, что если мы обратимся к несуществующему свойству в php, то свойство будет создано автоматически и при обращении к нему будет выведено.class SomeClass{
}
$obj = new SomeClass();
$obj->param = 4;
echo $obj->param; // должно быть выведено 4
Я ввожу вышеуказанный код у автора отображается четвёрка, у меня нет.
Я проверил все несколько раз, ошибиться здесь сложно, т.к. в коде буквально несколько строк.
Далее автор утверждает, что при переопределении магических методов __get(), __set(), можно работать с несуществующими свойствами класса.
Автор показывает это на примере следующего кода:class MyClass {
function __set($n, $v){
echo $n, ":", $v;
}
function __get($n){
echo $n;
}
}
$odj = new MyClass();
$odj->param = 100;
echo $obj->param;
У автора выводится значение "param:100param", у меня же в аналогичной ситуации выводит просто "param:100".
Т.е. получается ситуация, когда по каким-то причинам метод __get() не исполняется.
Тут я понимаю, что возможно дело в настройках моего локального сервера, на котором я обучаюсь, но после его переустановки все равно ничего не получается.
Версия php - 5.5
Подскажите что делать?

21 Авг 2019 в 07:03
176 +1
0
Ответы
1

Если метод __get() не используется в вашем коде, возможно проблема заключается в другом месте. Ниже представлены несколько шагов, которые вы можете предпринять, чтобы попытаться выяснить причину проблемы:

Проверьте правильность написания вашего кода. Убедитесь, что вы правильно написали название метода __get() и что он находится внутри класса.

Попробуйте использовать метод var_dump() для отладки. Посмотрите, какие данные передаются в метод __get() и вместо вывода просто значения переменных, используйте var_dump() для более подробного вывода.

Убедитесь, что ваш класс правильно наследует интерфейс ArrayAccess. Если вы хотите обращаться к объекту как к массиву, вам нужно использовать интерфейс ArrayAccess и его методы.

Проверьте настройки вашего локального сервера. Установите последнюю версию PHP, чтобы убедиться, что проблема не связана с устаревшей версией.

Попробуйте создать минимальный пример кода, который демонстрирует проблему, и опубликуйте его здесь. Возможно, другие пользователи смогут помочь вам выявить причину проблемы.

Надеюсь, эти советы помогут вам разобраться с проблемой метода __get() в вашем коде. Если у вас есть дополнительные вопросы, не стесняйтесь задавать их.

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