【问题标题】:Why instantiating an object prints its contents to a screen?为什么实例化一个对象会将其内容打印到屏幕上?
【发布时间】:2019-01-15 09:01:13
【问题描述】:

我有一个带有 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 文件中(使用基本的 html 代码输出页面)并且当我执行$object = new NewClass; 之类的操作时,这实际上会输出:

"这个类已经实例化我是一个属性到此结束 上课!”

到屏幕上。

为什么这样的东西会在屏幕上打印出文本?

$object = new NewClass 更像是给一个变量赋值(对我来说),而不是输出一个对象以及这个对象的内容是什么(比如$data 属性)。

那么为什么会这样呢?

【问题讨论】:

    标签: php class oop


    【解决方案1】:

    实例化一个对象不会打印任何东西。实例化对象不会打印对象内容。您使用echo 语句打印定义的字符串...

    【讨论】:

    • youtube.com/watch?v=QurLIncC0ak - 我现在正在处理这个教育视频。它确实将它打印到视频的屏幕上,我还在我的 IDE 中测试了这个事实。就像您说的那样,它不应该打印(这也是我的想法),但确实如此。那为什么呢?
    • pastebin.com/sijH7ssg - 这里是 one.php 和 two.php 的代码;粘贴到你的ide,自己看看。 (two.php 中的 echo 行可以被注释掉;只是 $object = new NewClass; 会打印出一些文本)。
    • @RobertSmith 因为你使用echo。如果您将其从代码中删除,则不会打印任何内容
    【解决方案2】:

    为什么这样的事情会在屏幕上打印出文本。

    因为执行此打印的方法被调用,这就是原因。

    $object = new NewClass; 创建该类的新对象实例,并在该过程中调用该类的 构造函数 - 代码中的 public function __construct 部分。 (在以前的 PHP 版本中,与类同名的方法被自动调用为构造函数,现在它是通过保留名称 __construct 完成的。)该方法包含一个 echo 语句,所以你会得到“这个类有被实例化”的输出。

    (您的示例不应输出您所说的“我是一个属性”部分 - 因为包含此属性的 $data 属性无法访问任何地方。并且您显示的代码没有'实际上并没有输出这个,见https://3v4l.org/XKcUR

    当整个脚本结束时,PHP 会进行“垃圾收集”并执行关闭函数,以清理所有内容。在该过程中,将调用所有仍然存在的对象的 析构函数 方法(如果存在)。这就是“这节课结束了!”的地方。您示例中的输出来自。

    您可以在此处阅读有关构造函数和析构函数的更多信息,http://php.net/manual/en/language.oop5.decon.php

    【讨论】:

      猜你喜欢
      • 2022-11-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-07
      相关资源
      最近更新 更多