PHP: Какая разница между инициализацией массива с «новым» и без него? - PullRequest
12 голосов
/ 16 ноября 2010

Я всегда создавал массивы, просто заполняя их

$foo[] = 'car';

но я видел много

$foo = array();
$foo[] = 'car';

и

$foo = new array();

В чем разница между не инициализацией, использованием array () и использованием new array ();?

спасибо!

Ответы [ 4 ]

21 голосов
/ 16 ноября 2010

Вы не создаете экземпляр массива в PHP, используя:

$foo=new array(); // error in PHP

Это для Javascript:

foo=new Array(); // no error in Javascript

В PHP new используется только для создания экземпляров объектов.

10 голосов
/ 16 ноября 2010

Разница в том, что использование new не работает, поскольку array() является языковой конструкцией, а не конструктором объектов. Выдает ошибку:

Parse error: syntax error, unexpected T_ARRAY in php shell code on line 1

С другой стороны, объявив его как

$f=array();

перед началом назначения предметов - это хорошая практика. В противном случае режим строгой регистрации ошибок может выдавать предупреждение об использовании необъявленной переменной.

5 голосов
/ 16 ноября 2010

Вы можете создать экземпляр массива в PHP с помощью ключевого слова new, однако он немного громоздче массивов, созданных с помощью функции array(), и не использует тот же вызов.

new ArrayObject();

будет создавать массив как объект. Что еще более важно, это расширяемый класс, если вы хотите использовать синтаксис массива с объектом в объектно-ориентированном PHP. В большинстве случаев рекомендуется просто использовать array() для скорости и простоты.

Редактировать: наверное, я никогда не отвечал на вопрос.

$var = array();
$var[] = 'car';

создаст новый пустой массив и затем добавит 'car' к массиву. Это хорошая форма для инициализации любых массивов. Было бы лучше написать эти две строки как одну: $var = array('car');

$var[] = 'car';

создаст новый массив с 'car', если $var не является массивом или пуст. Если $var уже объявлено как массив, вы можете обнаружить, что вы случайно сохранили некоторые более старые значения (именно поэтому рекомендуется инициализировать ваши массивы).

$var = new ArrayObject();
$var[] = 'car';

это ООП способ объявления массива. Это немного более ресурсоемко, поэтому придерживайтесь array(), если у вас нет веских причин использовать ArrayObject

Примечание:

Увеличение неинициализированной числовой переменной значительно медленнее, чем увеличение инициализированной числовой переменной ($i++ медленнее, чем $i = 0; $i++). Это не относится к массивам в php: ($var[] = 'car' примерно такой же, как $var = array(); $var[] = 'car')

0 голосов
/ 16 ноября 2010

foo = new Array(); - это синтаксис JavaScript.

Рекомендуется предварительно инициализировать массивы, когда это применимо, чтобы вы случайно не заполнили данные в существующий массив с тем же именем, определенным в другом месте кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...