В PHP вы можете использовать синтаксис массива для доступа к строковым индексам. Следующая программаPHP: Почему синтаксис массива на строке нулевой длины? Строка как массив?
<?php
$foo = "Hello";
echo $foo[0],"\n";
?>
отголоски из
H
Однако, если доступ к первому символу нулевой длины строки в
<?php
$bar = "";
$bar[0] = "test";
var_dump($bar);
?>
PHP превращает строку в массив. Вышеприведенный код производит
array(1) {
[0] =>
string(4) "test"
}
То есть моя строка нулевой длины была отлита к массиву. Аналогичные примеры «доступа к неопределенному индексу строки» не приводят к такому поведению.
$bar = " ";
$bar[1] = "test";
var_dump($bar);
Производит строку t
. то есть $bar
остается строкой и не преобразуется в массив.
Я получаю такие неинтуитивные кромки, которые неизбежны, когда язык должен вызывать и/или автоматически использовать переменную для вас, но кто-нибудь знает, что происходит за кулисами здесь?
Т.е. что происходит на уровне C/C++ в PHP, чтобы это произошло. Почему моя переменная превращается в массив.
PHP 5.6, если это имеет значение.
Нет вы создали массив, выполнив '$ bar [0] =" test ";' – RiggsFolly
@RiggsFolly, если вы используете '$ bar =" ";' пробел, '$ bar [0] =" test ";' будет показывать ' T'. Почему массив не создается в этом случае? –
@RiggsFolly Нет Я этого не сделал, я создал строку, когда я сказал '$ bar =" "'. PHP передал эту строку в виде массива, когда я попытался получить доступ к индексу в строке ('0'), которой не было. Попробуйте сценарий сценария '$ bar =" "' (одна строка символов) –