Почему создание экземпляра объекта выводит его содержимое на экран? - PullRequest
0 голосов
/ 15 января 2019

У меня есть файл с определением класса php, который выглядит следующим образом:

class NewClass {
public $data = "I am a property";

    public function __construct() {
        echo "This class has been instantiated <br>";
    }

    public function __destruct() {
        echo "<br> This is the end of the class!";
    }
}

Когда я включаю его в файл php nother (с базовым html-кодом для вывода страницы) и когда я делаю что-то вроде$object = new NewClass; это фактически вывело бы:

"Экземпляр этого класса создан, я являюсь свойством Это конец класса!"

на экран.

Почему что-то вроде этого выводит текст на экран?

Выполнение $ object = new NewClass больше похоже на присвоение чего-либо переменной (для меня), чем на вывод объекта вместе с чем-либосодержимое этого объекта (например, свойство $data).

Так почему же это работает так?

Ответы [ 2 ]

0 голосов
/ 15 января 2019

Почему что-то вроде этого выводит текст на экран.

Поскольку методы, которые делают эту печать , называются , вот почему.

$object = new NewClass; создает новый экземпляр объекта этого класса, и в этом процессе вызывается конструктор класса - часть public function __construct в вашем коде. (В предыдущих версиях PHP метод с тем же именем, что и у класса, автоматически вызывался в качестве конструктора, теперь он выполняется через зарезервированное имя __construct.) Этот метод содержит оператор echo, поэтому вы получите «Этот класс имеет был создан »вывод.

(Ваш пример не должен выводить часть «Я - свойство», которую, как вы сказали, вы получаете, - потому что к этому свойству $data, содержащему это свойство, не обращаются нигде . И ваш код, как показано, не ' на самом деле выведите это, см https://3v4l.org/XKcUR)

И когда весь сценарий заканчивается, PHP выполняет «сборку мусора» и выполняет функции выключения, чтобы очистить все. Во время этого процесса вызываются методы destructor (если они существуют) для всех еще существующих объектов. Вот откуда в вашем примере вывод «Это конец класса!».

Подробнее о конструкторах и деструкторах можно прочитать здесь, http://php.net/manual/en/language.oop5.decon.php

0 голосов
/ 15 января 2019

Создание объекта ничего не печатает. Создание объекта не печатает содержимое объекта. Вы печатаете определенные строки с помощью оператора echo ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...