Урок 17. Магические методы. Функции и операторы для работы с классами Flashcards
Магические методы перегрузки классов
__construct() Вызывается при создании класса
__destruct() Вызывается при удалении класса
__call(string $name array $arguments)
__callStatic(string $name array $arguments)
Вызываются при обращении к не существующему методу динамично или статично
__get(string $name)
__set(string $name mixed $value)
вызывается при попытке получить или установить не определенное значение класса
__isset(string $name) : bool
__unset(string $name) : bool
выполняются при проверке существования или удаления не определенного свойства класса
Больше волшебных методов класса
__serialize() : array { return []
__unserialize(array $data) : void
методы сериализации, используются обычно когда обьект нужно сохранить в файл или передать в БД а потом оттуда его загрузить
__toString() : string
вызывается при попытке преобразовать обьект в строку при выводе например echo xxx
__invoke(…values)
вызывается когда скрипт пытается выполнить обьект как функию
__debugInfo() : array
вызывается функией var_dump
__set_state(array $properties): obj
вызывается функций var_export
__clone()
вызывается при клонировании обьекта с помощью оператора clone
анонимный класс
класс без названия который создается в ограниченной области видимости и может быть применен для решения определенной задачи, может быть параметром фукнции или присвоен переменной
$var = new class {
…
}
Анонимный класс может наследоваться, реализовывать интерфейсы, создавать абстрактные классы
Динамическое создание классов
Когда создаваемый экземпляр берет название одного из классов из переменной.
Название класса указанное в виде строки внутри переменной или массива не содержит пространства имен класса. поэтому перед созданием экземпляра нужно укзаать явно пространство имен
$obj = __NAMESPACE__ . “\” . $classname
$obj = new $obj();
Быстрое получение полного имени класса
Если переменная хранящая данные по обьекту будет содержать не просто строку а название класса то не нужно явно указывать пространство имен класса
$arr = [
0 => first::class,
1 => second::class ]
Функции при работе с классами
class_exists(classname::class); - проверяет наличие класса по полному названию класса переданному в параметре, и возвращает bool
method_exists(object propName)
property_exists(object propName)
Проверяют наличие метода или свойства в классе
get_class(obj) - возвращает полное название класса по переданному в параметре обьекту
Проверка класса на принадлежность другому классу
с помощью оператора instanceof можно проверить является ли класс наследником другого класса