Магические методы в PHP
Здравствуйте! В этой статье я расскажу Вам о магических методах в PHP. Они позволяют программисту получить больший контроль над кодом, который будет исполняться, или же добавляют так называемый "синтаксический сахар", вследствие чего код можно писать яснее и чище.
Магические методы в PHP – это методы, которые начинаются с двойного подчеркивания, поэтому, согласно официальной документации по языку PHP, будьте бдительны, если намереваетесь использовать двойное подчеркивание, так как интерпретатор языка оставляет за собой право все методы, начинающиеся с двойного подчеркивания считать "магическими".
Итак, вот список этих методов:
- __construct, __destruct
- __call, __callStatic
- __get, __set
- __sleep, __wakeup
- __toString
- __invoke
Теперь подробнее о каждом методе.
__construct, __destruct
Эти методы вызываются автоматически при создании и уничтожении объекта. Метод __construct вызывается при создании объекта некоторого класса, а метод __destruct – при уничтожении этого объект. Метод __destruct в PHP используется редко, ввиду небольшого срока жизни скрипта.
__call, __callStatic
Эти два метода используются для одного и того же – для вызова методов, которые не созданы программистом в классе явно. Метод __call применяется для вызова несуществующих методов в контексте объекта, т.е. для вызова методов объекта. Метод __callStatic применяется для вызова методов в контексте класса, т.е. для вызова статических методов. Оба метода принимают в качестве параметров два аргумента: первый - $name – имя фиктивного метода, которое является регистрозависимым, т.е. $obj->method() и $obj -> Method() – будут разные методы, второй $arguments – массив аргументов метода:
<?php
class MyClass {
public function __call($name, $arguments) {
echo "Вызван метод '$name' со следующими аргументами " . implode(', ', $arguments) . PHP_EOL;
}
public static function __callStatic($name, $arguments) {
echo "Вызван статический метод '$name' со следующими аргументами " . implode(', ', $arguments) . PHP_EOL;
}
}
$obj = new MyClass;
$obj -> objMethod("метод объекта");
MyClass::objMethod("метод класса");
?>
__get, __set
Эти магические методы выполняют функцию установки и получения значения поля класса, которого не существует, т.е. с помощью них происходит обращение к несуществующим свойствам объекта. Пример:
<?php
class MyClass
{
// внутреннее хранилище
private $storage;
public function __get($name)
{
return $storage[$name];
}
public function __set($name, $value)
{
$storage[$name] = $value;
}
}
$obj = new MyClass;
$obj -> name = "Супер-класс";
print $obj -> name;
?>
__sleep, __wakeup
Применяются при сериализации объекта. Не буду останавливаться на этом, так как на сайте уже есть подробная статья об этих методах.
__toString
Этот метод Вы можете использовать тогда, когда хотите, чтобы объект мог быть свободно преобразован в строку. Обратите внимание, что метод обязательно должен возвращать строку, иначе интерпретатор выдаст ошибку. Пример:
<?php
class MyClass
{
public function __toString() {
return "Это мой класс";
}
}
$obj = new MyClass;
print $obj;
?>
__invoke
Этот метод используется для того, чтобы вызвать объект класса как функцию. Пример:
<?php
class MyClass
{
public function __invoke($arg) {
print $arg;
}
}
$obj = new MyClass;
// вызывается метод __invoke
print $obj("Обращение к объекту как к функции");
?>
Таким вот образом, теперь Вы знаете, что магические методы PHP могут использоваться там, где нужна функциональность, которую неудобно реализовывать стандартными средствами. А как Вы будете использовать их зависит только от Ваших потребностей .
-
- Михаил Русаков
Комментарии (0):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.