logo
Vvedenie_v_Veb_programmirovanien_2 / Vvedenie_v_Veb_programmirovanien_2

Магические методы

Функции, __construct, __destruct, __call, __callStatic, __get, __set, __isset, __unset, __sleep, __wakeup, __toString, __invoke, __set_state , __clone , имена которых начинаются с символа “_“ , являются магическими в PHP классах и имеют особую функциональность.

Методы доступа к свойствам объектов __get($name) и __set($name,$value) позволяют легко проводить динамическое назначение свойств объектам. В качестве параметров этим методам передаются имена свойств класса.

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

<?php

class MyClass {

private $properties;

function __set($name, $value) {

echo "задание нового свойства $name = $value";

$this->properties[$name]=$value;

}

function __get($name) {

echo "чтение значения свойства ", $name;

return $this->properties[$name];

}

}

$obj = new MyClass;

$obj->property = 1; // Выводит "задание нового свойства property=1"

$a = $obj->property; // Выводит "чтение значения свойства property"

echo $a; // выводит 1;

?>

При вызове в PHP 5 несуществующего метода объекта автоматически вызывается специальный метод __call().

<?php

class MyClass {

function __call($name, $params) {

echo "Вызван метод $name с параметром $params[0]";

}

}

$obj = new MyClass;

echo $obj->method(1); // Выводит "Вызван метод method

// с параметром 1"

?>

В качестве параметров __call() принимает имя вызываемого метода и передаваемые этому методу параметры.

В PHP 5 псевдо-константа __METHOD__ возвращает имя класса и вызываемый метод.

<?php

class MyClass {

public function myMethod() {

echo "вызов метода ", __METHOD__;

}

}

$obj = new MyClass;

$obj->myMethod();//Выводит "вызов метода MyClass::myMethod"

function myFunction() {

echo "вызов функции ", __METHOD__;

}

myFunction(); // Выводит "вызов функции myFunction"

?>

При обращении к функции вне класса __METHOD__ возвращает только имя функции.

В PHP 5 введен еще один специальный метод класса - __toString().

<?php

class MyClass {

function __toString() {

return "вызван метод __toString()";

}

}

$obj = new MyClass;

echo $obj; // Выводит "вызван метод __toString()"

?>

Метод класса __toString() позволяет выполнить перегрузку преобразования объекта в строку.