У меня есть переменная, которая построена в цикле. Что-то вроде:
$str = ""; for($i = 0; $i < 10; $i++) $str .= "something";
Если $ str = "" пропущено, я получаю уведомление неопределенной переменной, но я думал, что php автоматически объявляет переменную при первом обнаружении необъявленной?
Как мне это сделать правильно?
Вы получаете неопределенную переменную, потому что вы объединяете значение самого себя с другим значением.
Эквивалент
$str = $str . "something";
Таким образом, он не может сказать, что такое начальное значение. Это эквивалентно этому:
$str = [undefined value] . "something";
Каков результат конкатенации [undefined value]
и "something"
? Интерпретатор не может сказать …
Итак, вы должны сначала поместить ""
в переменную, чтобы инициировать значение переменной, как и вы.
НТН
Если вам действительно нужно сделать его чище, вы можете сделать:
for($i = 0, $str = ''; $i < 10; $i++) $str .= "something";
Но у вас есть то, что я обычно делаю. vlceBerg объясняет это хорошо.
Безопаснее не использовать функцию автообъявления – поэтому она выдает уведомление. Уведомление – это самый низкий уровень предупреждения и не будет отображаться по умолчанию. Большинство старых PHP-приложений выдадут много уведомлений, если вы включили их.
Переменные PHP, которые автоматически объявляются, регистрируются как неопределенные, поэтому вы получаете уведомление.
Обычно лучше объявлять переменные PHP перед их использованием, хотя многие из ленивых среди нас, включая меня, не всегда делают это.