Необходимо ли объявлять массив PHP перед добавлением значений с помощью []?



$arr = array(); // is this line needed?
$arr[] = 5;


Я знаю, что это работает без первой строки, но это часто включается в практику.



в чем причина? Это небезопасно без него?



Я знаю, что вы также можете сделать это:



 $arr = array(5);


но я говорю о случаях, когда вам нужно добавлять элементы по одному.

415   9  

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

    Ничего не найдено.