Оглавление

Преобразование объекта в строку

Для вывода объекта в виде строки предусмотрен еще один магический метод:  __toString().
Попытки вывести объект в виде строки, минуя метод  __toString(), приведут
к возникновению фатальной ошибки. Попытаемся, например, использовать команду echo для вывода объекта без привлечения магического метода.

 <?php 
 
class MyClass 
{ 
    public $prop1 = "Это свойство класса!"; 
 
    public function __construct() 
    { 
        echo 'Класс "', __CLASS__, '" инициирован!<br />'; 
    } 
 
    public function __destruct() 
    { 
        echo 'The class "', __CLASS__, '" уничтожен.<br />'; 
    } 
    public function setProperty($newval) 
    { 
        $this->prop1 = $newval; 
    } 
 
    public function getProperty() 
    { 
        return $this->prop1 . "<br />"; 
    } 
} 
 
// Создать новый объект  
$obj = new MyClass; 
 
// Вывести объект в виде строки   
echo $obj;                        
 
// Уничтожить объект
unset($obj); 
 
// Вывести сообщение в конце файла  
echo "Конец файла.<br />"; 
 
?>  


Результат работы этого сценария будет следующим.

 

Класс "MyClass" инициирован!

Catchable fatal error: Object of class MyClass could not be converted to string in F:\xampp\htdocs\testing\test.php on line 32

 

 

Чтобы избежать этой ошибки, добавьте в сценарий метод  __toString().

 

<?php 
 
class MyClass 
{ 
    public $prop1 = "Это свойство класса!"; 
 
    public function __construct() 
    { 
        echo 'Класс "', __CLASS__, '" инициирован!<br />'; 
    } 
public function __destruct() 
    { 
        echo 'Класс "', __CLASS__, '" уничтожен.<br />'; 
    } 
 
    public function __toString()             
    {                                        
        echo "Используем метод toString: ";  
        return $this->getProperty();         
    }                                        
 
    public function setProperty($newval) 
    { 
        $this->prop1 = $newval; 
    } 
 
    public function getProperty() 
    { 
        return $this->prop1 . "<br />"; 
    } 
} 
 
// Создать новый объект 
$obj = new MyClass; 
 
// Вывести объект в виде строки
echo $obj; 
 
// Уничтожить объект 
unset($obj); 
 
// Вывести сообщение в конце файла 
echo "Конец файла.<br />"; 
 
?> 


В этом случае при попытке преобразовать объект в строку будет вызван метод getProperty().

 

Перезагрузив тестовый сценарий в браузере, вы получите следующий результат.

Класс "MyClass" инициирован!
Используем метод toString: Это свойство класса!
Класс "MyClass" уничтожен.
Конец файла.

 

Совет. Существует ряд других магических методов, кроме тех, которые обсуждались в этом разделе. Полный список магических методов приводится в руководстве no PHP, которое находится по следующему адресу:  http://us2.php.net/manual/en/language.oop5.magic.php
Комментарии принадлежат их авторам. Мы не несем ответственности за их содержание.
Отправитель Нити