#7. 3 php Создание объекта. Представление объекта в виде строки (перегрузка преобразования объекта в строку)

В предыдущем разделе был создан класс Animal, но для того, чтобы его использовать, следует вначале создать объект данного класса. Обычные переменные в зависимости от своего содержимого имеют определенный тип данных. Класс также является типом данных, и объект класса может быть сохранен в переменной.

Создание объекта

Для создания нового объекта созданного класса используется оператор new. Этот оператор требуется только при создании объектов, а не для обычных скалярных типов данных. Например, для создания объекта класса Animal и сохранения ссылки на него в переменной $lion используется следующий синтаксис (класс Animal описан в предыдущем разделе):

$lion = new Animal;

После создания объекта доступ к его методам обеспечивает оператор ->. Например, для присвоения имени может использоваться метод set_name:

$lion->set_name("Бонифаций")

Для того, чтобы считать присвоенное имя, используется метод get_name, как показано ниже:

echo "Имя нового льва: ", $lion->get_name(), "."

В результате выполнения этого фрагмента будет отображена строка:

Имя нового льва: Бонифаций.

Оператор -> открывает доступ как к методам класса, так и к его свойствам. Хорошим тоном в ООП является присвоение значений свойствам класса при помощи соответствующих методов, в этом случае в зависимости от конкретных данных могут быть осуществлены дополнительные действия. Такие методы называются методами доступа. Например, следующий метод ограничивает длину имени животного 10 символами:

public function set_name($text)
{
    if (strlen($text) <= 10) {
        $this->name = $text;
    }
}

Представление объекта в виде строки

Мы описали класс Animal и создали объект данного класса $lion. При попытке вывести объект на экран:

echo $lion;

получаем сообщение о невозможности преобразования объекта $lion в строку:

Fatal error: Uncaught Error: Object of class Animal could not be converted to string

В PHP имеется возможность перегрузки преобразования в строку для объектов. Для этого в классе Animal мы должны описать специальный метод __toString, который будет вызван каждый раз, когда будет затребовано неявное преобразование ссылки на объект в строку:

class Animal
{
    private $name;
    public function set_name($text)
    {
        $this->name = $text;
    }
    public function get_name()
    {
        return $this->name;
    }
   
    public function __toString() 
    {
        return $this->name;
    }
}

Теперь в результате выполнения кода

$lion = new Animal;
$lion->set_name('Бонифаций');
echo "Это животное зовут $lion";

получим строку:

Это животное зовут Бонифаций

mariyas's picture

добавлено: "Представление объекта в виде строки"