Как использовать магические методы PHP?

Красивый кодинг

Красивый кодинг

Часто замечаю, что многие даже и не знают, что такое магические методы PHP и зачем они вообще нужны. В данной статье, я рассмотрю один из примеров использования. Я его постоянно применяю в своих проектах.
Итак, возьмем функцию __get().
В официальной документации PHP:

Метод __get() будет выполнен при чтении данных из недоступных свойств.

Перейдем сразу к моему примеру использования данной функции:

public function __get($name)
{
    if(is_string($name))
    {
        $function_name = "load_".$name;
        if(method_exists($this, $function_name))
        {
            $this->{$name} = $this->$function_name();
            return $this->{$name};
        }
    }
}

Идем по порядку. К примеру есть Объект $item, представляющий класс Item. Мы пытаемся получить несуществующее(не заданное) св-во category: $item->category. В результате  PHP обратится к нашей функции __get($name). В параметре $name будет передано название св-ва, которое мы пытались получить, но не смогли.

Идем далее…

Здесь уже можно задавать конкретное значение(константу) например, но я пошел другим путем. Скажем, нам нужно динамически извлечь или получить объект связанного класса Category, при обращении к св-ву category в объекте класса Item. Все просто, мы создаем метод load_category() в классе Item, который, как вы уже поняли будет вызывать и его результат запишется уже в несуществующее св-во и вернет его пользователю.

Многие спросят: «Зачем так заморачиваться, когда можно просто вместо $item->category, вызвать $item->load_category()?»

Я поясню…

Сценарий следующий:

При загрузке страницы, вам нужно манипулировать объектом $item и несколько раз у него получить категорию, то есть вызвать load_category(). Получается, что у вас будут происходить каждый раз вычисления, либо обращения к БД. Если у вас проект огромный, то вы, естественно хотели бы избежать повторного обращения к БД и ускорения загрузки страницы.

Мой пример позволяет оптимизировать выполнение вашего кода. Таким образом, что при первом вызове $item->category, у вас выполнятся все действия из функции load_category(), НО результат сохранится как св-во объекта $item. Повторный вызов $item->category просто извлечет данные из памяти, не выполняя всю логику в функции load_category(), что является огромным плюсом, спасителем времени и ресурсов времени.

Данный пример один из многих, когда магические методы PHP очень полезны в оптимизации.

Похожие записи
  • Как запустить веб приложение через NP... Как запустить веб приложение через NPM с помощью serve. Есть множество способов запустить свои web html проекты. Для этого потребуется веб-сервер. Есть несколько простых веб-серверов для nodejs, которые можно использовать для запуска приложений. Это очень удобно для разработки и отладки. В данной статье не берем Express, так как он довольно сложен для настройки и использования. [...]
  • Магнитное решение твоего беспорядка Если тебе интересно мое магнитное решение твоего беспорядка, присоединяйся к просмотру видео. Очередная полезная штуковина из просторов интернета. Теперь ты сможешь без труда организовать и прикрепить свои провода в нужно место за рабочим столом, в машине или в других [...]
  • Как отследить все Javascript события ... Привет, сегодня я хочу рассказать тебе о простом но очень полезном методе, который позволяет отследить все Javascript события в Chrome. Он тебе поможет отследить все события, все вызовы всех функций на твоем сайте. Очень полезная команда для отладки фронт-энда. [...]
  • Как пользоваться популярными трекерам... Как пользоваться популярными трекерами без стороннего софта, прокси серверов или расширений Все просто. Недавно я писал про один из способ улучшить работу вашего интернета, который вы можете найти здесь и здесь. Днс сервера гугла помогут вам с этим, но могут и не помочь, как было у меня, потому как провайдер блокировал весь трафик, поступающий с данного [...]
  • Встраивание Foundation в Laravel с по... Что такое Elixir? Elixir — это компонент Laravel, позволяющий без проблем встраивать scss, sass, less компоненты в ваш проект. С помощью данного компонента очень легко можно подключить любые фронт-энд пакеты из npm, скомпилировать их, вести версии. Инструкция Для начала, чтобы скомпилировать исходный код фронтэнд библиотек, как известно, вам необходимо установить node с менеджером пакетов npm. [...]

Пока нет комментариев

Добавить комментарий