php - 打印包含在数组键中的值和打印包含在对象属性的数组键中的值有什么区别?

标签 php arrays object key type-coercion

考虑以下代码片段及其各自的输出:

代码片段 1:

<?php
  $juices = array("apple", "orange", "koolaid1" => "purple");

  echo "He drank some $juices[0] juice.".PHP_EOL;
  echo "He drank some $juices[1] juice.".PHP_EOL;

  class people {
    public $john = "John Smith";
  }

  $people = new people();

  echo "$people->john drank some $juices[0] juice.".PHP_EOL;
?>

代码片段 1 的输出:

He drank some apple juice.
He drank some orange juice.
John Smith drank some apple juice.

代码片段 2:

<?php
  class foo {
    public $foo;
    public $bar;

    function __construct() {
      $this->foo = 'Foo';
      $this->bar = array('Bar1', 'Bar2', 'Bar3');
    }
  }

  $foo = new foo();
  $name = 'MyName';

  echo "My name is \"$name\". I am printing some $foo->foo.
  Now, I am printing some $foo->bar[1].";
?>

代码片段 2 的输出:

Notice: Array to string conversion in hello.php on line 16
My name is "MyName". I am printing some Foo. Now, I am printing some Array[1].

如果仔细观察,您会发现在第一个程序中我能够打印包含在数组键中的值,即。 $juices[0], $juices[1] 但在第二个程序中,当我尝试打印包含在数组键中的值并且该数组是一个对象属性时,我收到了一条通知。

我不明白为什么我会收到第二个程序的数组到字符串转换通知

有人,请给我解释清楚差异,并帮助我在第二个程序中打印数组键值。

最佳答案

PHP 可以正确确定您在第一个代码块中引用的预期元素和对象。然而,在第二种情况下,PHP 希望非常清楚如何访问对象的元素。在其他情况下,PHP 竭尽全力简化编码(类型判断和其他此类功能),但在这种情况下,它需要控制我们并要求脚本清晰。

你只需要改进你的语法。

使用花括号来修复它。 ( Demo )

<?php
  class foo {
    public $foo;
    public $bar;

    function __construct() {
      $this->foo = 'Foo';
      $this->bar = array('Bar1', 'Bar2', 'Bar3');
    }
  }

  $foo = new foo();
  $name = 'MyName';

  echo "My name is \"$name\". I am printing some $foo->foo.
  Now, I am printing some {$foo->bar[1]}.";
?>

来自 the manual 的类似演示(虽然这个使用的是 nowdoc,而不是双引号——它仍然包含在 {} 中):

enter image description here

关于php - 打印包含在数组键中的值和打印包含在对象属性的数组键中的值有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47816017/

相关文章:

php - 将输入类型文本的数据数组保存到数据库

arrays - 带有 *ngFor 的 Angular2 奇怪的形式行为

php - 在laravel中自动检测登录用户的右后卫

javascript - 如何限制来自 WordPress 短代码的内容?

php - 我应该如何在 MySQL 中过滤日期

python - 关于 numpy 沿轴应用和列表理解的困惑

java - 计算实例变量增加的次数

php - fatal error : Cannot declare class

c# - 如何将字符串字符转换为整数数组

c++ - 使用模板将类函数应用于对象 vector