Какая разница в печати значения, содержащегося в ключе массива, и печати значения, содержащегося в ключе массива свойства объекта?

Рассмотрим ниже фрагменты кода и их соответствующие выводы:

Фрагмент кода 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] но во второй программе я получаю уведомление, когда пытаюсь напечатать значение, содержащееся в ключе массива, а массив является свойством объекта.

Я не понимаю, почему я получаю это Уведомление о преобразовании массива в строку для второй программы.

Кто-нибудь, пожалуйста, объясните мне различия с хорошим объяснением и помогите мне напечатать значение ключа массива во второй программе.

3

Решение

PHP может правильно определить предполагаемый элемент и объект, на который вы ссылаетесь в первом блоке кода. Однако во втором случае PHP хочет быть предельно ясным о том, как получить доступ к элементу объекта. В других случаях PHP наклоняется назад, чтобы упростить кодирование (жонглирование типами и другие подобные функции), но в этом случае он должен влиять на нас и требовать ясности в сценарии.

Вам нужно только улучшить свой синтаксис.

Используйте фигурные скобки, чтобы исправить это. (демонстрация)

<?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]}.";
?>

Похожая демонстрация от руководство (хотя этот использует nowdoc, а не двойные кавычки — все еще это {}):

введите описание изображения здесь

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]