Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Веб программирование.Начало пути.doc
Скачиваний:
2
Добавлен:
01.04.2025
Размер:
7.81 Mб
Скачать

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

Функции, __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() позволяет выполнить перегрузку преобразования объекта в строку.

Обработка ошибок

Начиная с PHP 5 введена современная схема обработки исключений. Конструкция try/catch/throw позволит весь код обработки ошибок локализовать в одном месте сценария. Рассмотрим пример:

<?php

try {

$fp = @fopen("file.txt", "w"); 

if (!$fp) throw new Exception("Невозможно открыть файл!");

// Запись данных в файл

fclose($fp);  }

catch (Exception $exception) {

echo "Ошибка в строке ", $exception->getLine();

echo $exception->getMessage(); // Выводит "Невозможно

// открыть файл"

}

?>

В конструкции можно использовать несколько блоков catch. Также возможно создание собственных классов исключений, производных от встроенного класса Exception.