В некоторых других языках (например, AS3) было отмечено, что инициализация нового массива происходит быстрее, если это делается так, var foo = []
а не var foo = new Array()
по причинам создания и создания объектов. Интересно, есть ли какие-нибудь эквиваленты в PHP?
class Foo {
private $arr = array(); // is there another / better way?
}
php
arrays
initialization
Том Оже
источник
источник
array_fill
? php.net/manual/en/function.array-fill.php$arr = array()
или$arr = []
Ответы:
В реализациях ECMAScript (например, ActionScript или JavaScript)
Array()
является функцией конструктора и[]
является частью литеральной грамматики массива. Оба оптимизируются и выполняются совершенно по-разному, причем буквальная грамматика не преследуется из-за накладных расходов при вызове функции.PHP, с другой стороны, имеет языковые конструкции, которые могут выглядеть как функции, но не рассматриваются как таковые. Даже с PHP 5.4, который поддерживает
[]
в качестве альтернативы, нет разницы в накладных расходах, потому что, с точки зрения компилятора / синтаксического анализатора, они полностью синонимичны.Если вам нужно поддерживать более старые версии PHP, используйте прежний синтаксис. Есть также аргумент в пользу читабельности, но, будучи давним разработчиком JS, последний кажется мне вполне естественным. Я на самом деле совершил ошибку, пытаясь инициализировать массивы, используя,
[]
когда я впервые изучал PHP.Это изменение языка было первоначально предложено и отклонено большинством голосов основных разработчиков по следующей причине:
Тем не менее, похоже, что произошла смена сердца, ведущая к 5,4, возможно, под влиянием реализации поддержки популярных баз данных, таких как MongoDB (которые используют синтаксис ECMAScript).
источник
$array = [];
поскольку это облегчает переход между JS и PHP.$array = [];
лучше вариант ??? или я должен попробовать другой. какой из них лучше[]
их немного проще набрать.Создает пустой массив.
Вы можете вставить значения в массив позже, например, так:
На данный момент $ myArray содержит «дерево», «дом» и «собака». Каждая из вышеперечисленных команд добавляется в массив, сохраняя элементы, которые уже были там.
Исходя из других языков, этот способ добавления в массив мне показался странным. Я ожидал сделать что-то вроде $ myArray + = "dog" или что-то в этом роде ... или, возможно, метод "add ()", как в коллекциях Visual Basic. Но этот синтаксис прямого добавления, безусловно, короткий и удобный.
Вы действительно должны использовать функцию unset () для удаления элементов:
... удалит "дом" из массива (массивы начинаются с нуля).
... уничтожит весь массив.
Для ясности, синтаксис в пустых квадратных скобках для добавления в массив - это просто способ сообщить PHP, что индексы присваиваются каждому значению автоматически, а не ВЫ назначаете индексы. Под прикрытием PHP фактически делает это:
Вы можете назначить индексы самостоятельно, если хотите, и можете использовать любые числа, которые хотите. Вы также можете назначить номера индексов для некоторых элементов, а не для других. Если вы сделаете это, PHP заполнит пропущенные индексные номера, увеличиваясь с самого большого индексного номера, назначенного на ходу.
Итак, если вы сделаете это:
... элемент "собака" получит индекс с номером 21. PHP не выполняет интеллектуальное сопоставление с шаблоном для присвоения инкрементного индекса, поэтому он не будет знать, что вы, возможно, хотели, чтобы индекс "30" присваивался собаке. ». Вы можете использовать другие функции, чтобы указать шаблон приращения для массива. Я не буду вдаваться в подробности здесь, но все это в документах PHP.
Ура,
- = Cameron
источник
$array[] = 'foo'
отлично работает в старых версиях PHP. Это только$array = [];
для инициализации массива, нового в 5.4.До PHP 5.4:
PHP 5.4 и выше
источник
В PHP массив - это массив; не существует примитивного и объектного рассмотрения, поэтому нет никакой сопоставимой оптимизации, которую нужно иметь.
источник
То, что вы делаете, на 100% правильно.
С точки зрения хорошего именования часто делается так, что частным / защищенным свойствам предшествует символ подчеркивания, чтобы сделать очевидным, что они не являются публичными. Например,
private $_arr = array()
илиpublic $arr = array()
источник
$this
для получения значения и никогда не должны использовать публичные свойства.$this->arr
и$this->_arr
. Почему вы никогда не должны использовать публичные свойства ?!Попробуй это:
источник
Другого пути нет , так что это лучший.Изменить: Этот ответ не действителен с PHP 5.4 и выше.
источник
Инициализация простого массива:
Инициализация массива в массиве:
Источник: Сорс за код
источник