Необходимо ли объявлять массив PHP перед добавлением значений с помощью []?
$arr = array(); // is this line needed?
$arr[] = 5;
Я знаю, что это работает без первой строки, но это часто включается в практику.
в чем причина? Это небезопасно без него?
Я знаю, что вы также можете сделать это:
$arr = array(5);
но я говорю о случаях, когда вам нужно добавлять элементы по одному.
9 ответов:
Если вы не объявите новый массив, а данные, которые создают / обновляют массив, не будут работать по какой-либо причине, то любой будущий код, который попытается использовать массив, будет
E_FATALпотому что выбора не существует.например,
foreach()выдаст ошибку, если массив не был объявлен и в него не были добавлены значения. Однако ошибки не возникнут, если массив просто пуст, как это было бы в случае, если бы вы его объявили.
просто хотел отметить, что PHP документация на
arraysна самом деле говорит об этом в документации.С сайта PHP, с сопроводительным фрагментом кода:
$arr[key] = value; $arr[] = value; // key may be an integer or string // value may be any value of any type"Если
$arrеще не существует, он будет создан, так что это тоже альтернативный способ создания массива."но, как указано в других ответах...вы действительно должны объявить значение для своих переменных, потому что все плохие вещи могут случится, если ты этого не сделаешь.
Php-это слабо типизированный язык. Это вполне приемлемо. При этом настоящие программисты всегда объявляют свои Вары.
подумайте о кодерах, которые приходят после вас! Если вы просто видите
$arr[] = 5, ты не представляешь, что$arrможет быть без чтения всего предыдущего кода в области видимости. Явное$arr = array()линия становится ясно.
Это просто хорошая практика. Предположим, вы добавляете к своему массиву внутри цикла (довольно распространенная практика), но затем получаете доступ к массиву вне указанного цикла. Без объявления массива ваш код будет выдавать ошибки, если вы никогда не попадете в цикл.
Я настоятельно рекомендую объявить массив перед добавлением значения. Помимо всего вышеперечисленного, если массив находится внутри цикла, вы можете непреднамеренно толкать элементы в свой массив. Я просто наблюдал, как это создает дорогостоящую ошибку.
//Example code foreach ($mailboxes as $mailbox){ //loop creating email list to get foreach ($emails as $email){ $arr[] = $email; } //loop to get emails foreach ($arr as $email){ //oops now we're getting other peoples emails //in other mailboxes because we didn't initialize the array } }
Это зависит от ваших ошибок. Если у вас есть отчет об ошибках на strict, он даст вам уведомление, но он все равно должен технически работать без него.
Это хорошо в случае, когда вам это нужно в качестве глобальной переменной или вы хотите использовать один и тот же массив снова и снова в разных функциях
согласен с @djdy, только один вариант, который я хотел бы опубликовать:
<?php // Passed array is empty, so we'll never have $items variable available. foreach (array() AS $item) $items[] = $item; isset($items) OR $items = array(); // Declare $items variable if it doesn't exist ?>
Comments