Окт
24

PHP: Определение строкового представления объекта

Автор Flashback    Рубрики Статьи и обзоры     Теги

Задача

Требуется управлять представлением объекта при его выводе из PHP.

Решение

Реализация метода __toString():
class Person {
// Остальной код класса
public function toString() {
return "$this->name <$this->email>";
}

Комментарий

PHP предоставляет объектам возможность управлять процессом их преобразования в строковую форму. Это позволяет вывести представление объекта удобным способом, без большого объема дополнительного кода.

При выполнении команды echo или print для отдельного объекта PHP вызывает метод __toString () этого объекта.

Пример:
class Person {
protected $name; protected $email;
public function setName($name) {
$this->name = $name;
}
public function setEmail($email) {
$this->email = $email;
}
public function __toString() {
return "$this->name <$this->email>";
}
}

После этого представление объекта выводится следующим образом:
$rasmus = new Person;
$rasmus->setName('Rasmus Lerdorf');
$rasmus->setEmail('rasmus@php.net'); print $rasmus;
Rasmus Lerdorf

При вызове print PHP автоматически вызывает метод __toString() и возвращает строковое представление объекта.

Метод должен возвращать строку; в противном случае PHP выдаст сообщение об ошибке. Хотя это кажется очевидным, иногда разработчиков подводит механизм автоматического преобразования типа, который здесь не работает.

Например, с точки зрения разработчика, строка ‘9’ часто считается эквивалентом целого числа 9, потому что PHP обычно переключается между ними в зависимости от контекста и почти всегда с правильным результатом.

Однако функция __toString() не может возвращать целые числа. Если вы подозреваете, что метод может вернуть нестроковое значение, рассмотрите возможность явного преобразования типа результата:

class TextInput {
// Остальной код класса

public function __toString() {
return (string) $this->label;
}
}

Преобразуя $this->label в string, вы можете не беспокоиться о том, что кто-то может снабдить текстовое поле числовой меткой.

До выхода PHP 5.2 функциональность __toString() обладала рядом ограничений.

Следовательно, если вы часто используете __toString() в своем коде, лучше
работать с PHP 5.2 и выше.

Написать комментарий

XHTML: Вы можете использовать эти теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>