$arr = array(); // is this line needed? $arr[] = 5;
Я знаю, что это работает без первой строки, но часто используется на практике.
Какова причина? Это безопасно без него?
Я знаю, вы тоже можете это сделать:
$arr = array(5);
но я говорю о случаях, когда вам нужно добавлять элементы по одному.
Если вы не объявляете новый массив, а данные, которые создают / обновляют массив, не E_FATAL
по какой-либо причине, тогда любой будущий код, который пытается использовать массив, будет E_FATAL
потому что массив не существует.
Например, foreach()
выдает ошибку, если массив не был объявлен, и никакие значения не были добавлены к нему. Однако никаких ошибок не произойдет, если массив просто пуст, как и в случае, если бы вы его объявили.
Просто хотелось указать, что документация по arrays
на PHP фактически говорит об этом в документации.
С сайта 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 } }
Это зависит от вашей проверки ошибок. Если у вас есть отчет об ошибках в строгом виде, вы получите уведомление, но он все равно будет работать без него.
Это хорошо в случае, если вам это нужно как глобальная переменная или хотите повторно использовать один и тот же массив снова и снова в разных функциях
Согласитесь с @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 ?>