【问题标题】: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()?为什么包含对对象的引用的变量不能在 PHP 中回显?为什么在 var_dump() 之后对象和引用的输出是一样的?
【发布时间】:2015-08-05 08:14:42
【问题描述】:

我在名为“prog_1.php”的文件中编写了以下代码 sn-p:

<?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()

标签: php class oop object var-dump


【解决方案1】:

要回显一个对象或数组,你必须使用 print_r($var);对象或数组不是字符串,并且 echo 仅输出字符串整数 ..etc

【讨论】:

    【解决方案2】:

    要获得对象的字符串表示,请在对象中实现魔术 __toString() 方法。这用于序列化对象以进行字符串表示。 (您可以使用它来将(私有)成员作为字符串返回并使您的类“可回显”

    【讨论】:

    • 并解释您的参考问题。通过引用应被视为使用不同变量到同一源变量的链接。 “对象和引用之间没有区别吗?” 引用不是数据类型,它是一种通过引用传递变量而不是复制变量的方法。除了对象还可以与字符串和数组一起使用。
    猜你喜欢
    • 1970-01-01
    • 2019-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-23
    • 2011-09-29
    相关资源
    最近更新 更多