为什么包含对象引用的变量不能在PHP中回显?为什么对象和引用的输出在var_dump()之后是一样的


Why the variable containing reference to an object can't be echoed in PHP? Why the output of object and reference is same after var_dump()?

我在名为"prog_1.php"的文件中编写了以下代码片段:

<?php
  ini_set('display_startup_errors',1);
  ini_set('display_errors',1);
  error_reporting(-1);
  class SimpleClass {
    // property declaration
    public $var = 'a default value';
    // method declaration
    public function displayVar() {
      echo $this->var;
    }
  }
  $instance = new SimpleClass();
  $assigned   =  $instance;
  $reference  =& $instance;
  var_dump($instance);
  echo "'n";
  echo $reference; //At this step I'm getting a "Catchable fatal error" 
  echo "'n";
  var_dump($reference); 
?>

我的第一个问题是上面代码的下面一行:

echo $reference;
对于这行代码,我得到以下错误:
**Catchable fatal error:** Object of class SimpleClass could not be converted to string in /var/www/practice/prog_1.php on line 23

我不明白,如果我可以var_dump()类的对象,那么为什么我不能回声相同?

我的第二个疑问是如果执行以下两个语句:

var_dump($instance);
var_dump($reference);

这两个语句给出了如下相同的输出:

object(SimpleClass)#1 (1) {
  ["var"]=>
  string(15) "a default value"
}

为什么?对象和参照物没有区别吗?上面输出的#1是什么意思?

希望有人能澄清我的上述疑虑,提供我满意的和最好的类的答案,简单,容易理解和脆的语言。

要拥有对象的字符串表示,请在对象中实现神奇的__toString()方法。这用于将对象序列化为字符串表示。(您可以使用它作为字符串返回(私有)成员,并使您的类为"echo-able"

)

要回显对象或数组,必须使用print_r($var);对象或数组不是字符串,echo只输出字符串整数等