Специальный метод "__toString()" даёт возможность интерполировать, то есть подставлять объект в строку. Для того чтобы подставить значение переменных необходимо строку поместить в двойные кавычки. Если строка использует одинарные кавычки, то значение переменной не интерполируется.
Интерполяция переменной:
$_MyString = "1 строка";
echo "_MyString = $_MyString"; # _MyString = 1 строка ;
echo '_MyString = $_MyString'; # _MyString = $_MyString ;
Этого результата можно добиться и от объекта, если реализовать в его классе метод "__toString()", который преобразует объект в строку.
Приведём пример, в котором будет использоваться специальный метод "__toString":
class myToString {
public $_string;
public $_tostring;
public function __construct ($_string, $_tostring) {
$this->_string = $_string;
$this->_tostring = $_tostring;
}
public function __toString() {
/* Метод "__toString()" выводит результат при использовании конструкции "return", а не "echo". */
return "$this->_string - $this->_tostring";
}
}
$_to_my_class = new myToString("Интерполяция", "Объекта");
echo "$_to_my_class";
В данном примере приводится принцип интерполяции объекта класса "myToString", при этом вместо объекта "$_to_my_class" подставляется фраза "Интерполяция - Объекта". Сам метод "__toString" вызывается автоматически в любом месте контекста, где ожидается строка, например результат работы следующего примера полностью аналогичен тому, что был получен после работы скрипта из предыдущего примера. Вызов "__toString()" в строковом контексте:
$_to_my_class = new myToString("метода __toString()", "в");
$_string = "Вызов ";
$_string .= $_to_my_class;
$_string .= " строковом контексте.";
echo $_string;
Такой способ вызова объекта в строковом констексте возможен, только если его класс содержит метод "__toString()", в ином случае такая реализация объекта в строке будет заканчиваться ошибкой.
Приведём ещё один пример метода "__toString()", реализуем класс - обёртку "myBreak", который будет выполнять те же действия что и функция "implode()". Конструктор будет принимать два параметра: массив "$_myArray" и разделитель "$_mySeparator". Метод "__toString()" будет объединять элементы массива "$_myArray" в строку, отделяя их друг от друга разделителем "$_mySeparator".
class myBreak {
public function __construct ($_mySeparator, $_myArray) {
$this->_myArray = $_myArray;
$this->_mySeparator = $_mySeparator;
$this->_myIterator = $_myIterator;
$this->_myString = $_myString;
$this->_myValue = $_myValue;
}
public function __toString() {
$this->_myString = "";
# Рекурсивный обход массива посредством библиотеки PHP "SPL".
$this->_myIterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($this->_myArray));
foreach($this->_myIterator as $this->_myValue)
{
$this->_myString .= $this->_myValue . $this->_mySeparator;
}
return mb_substr($this->_myString, 0, mb_strlen($this->_myString) - mb_strlen($this->_mySeparator));
}
}
# В первом аргументе указывается символ с помощью которого будет разбит массив (можно подставлять что угодно).
$_Class_myBreak = new myBreak('-', array('Элемент 1', 'Элемент 2'));
echo $_Class_myBreak;
Результатом будет следующая строка: Элемент 1 - Элемент 2.