Специальный метод "__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.

captcha