Подтвердить что ты не робот

Почему строки работают как массив в PHP 5.3?

У меня есть этот код:

$tierHosts['host'] = isset($host['name']) ? $host['name'] : $host;

Он отлично работает в PHP 5.5, но в PHP 5.3 условие возвращает true, а $host содержит строку типа pjba01. Он возвращает первую букву $tierHosts['host'], то есть p.

Что не так с моим кодом?

4b9b3361

Ответ 1

Вы можете получить доступ к строкам, подобным массиву, а предыдущие смещения PHP 5.4, такие как ваш name, были незаметно добавлены к 0, означает, что вы получили доступ к первому символу этой строки:

character | p | j | b | a | 0 | 1 |
-----------------------------------
index     | 0 | 1 | 2 | 3 | 4 | 5 |

После 5.3 такие смещения будут вызывать уведомление, как вы также можете прочитать в руководстве:

Как и в случае с PHP 5.4, смещения строк должны быть либо целыми, либо целыми целыми строками, иначе будет выдано предупреждение. Раньше смещение, подобное "foo", было тихо отброшено до 0.