Dans certains autres langages (AS3 par exemple), il a été noté que l'initialisation d'un nouveau tableau est plus rapide s'il est fait ainsi var foo = []
plutôt que var foo = new Array()
pour des raisons de création et d'instanciation d'objets. Je me demande s'il y a des équivalences en PHP?
class Foo {
private $arr = array(); // is there another / better way?
}
php
arrays
initialization
Tom Auger
la source
la source
array_fill
? php.net/manual/en/function.array-fill.php$arr = array()
ou$arr = []
Réponses:
Dans les implémentations ECMAScript (par exemple, ActionScript ou JavaScript),
Array()
est une fonction constructeur et[]
fait partie de la grammaire littérale du tableau. Les deux sont optimisés et exécutés de manières complètement différentes, la grammaire littérale n'étant pas gênée par la surcharge de l'appel d'une fonction.PHP, d'autre part, a des constructions de langage qui peuvent ressembler à des fonctions mais qui ne sont pas traitées comme telles. Même avec PHP 5.4, qui prend
[]
en charge une alternative, il n'y a pas de différence de surcharge car, en ce qui concerne le compilateur / analyseur, ils sont complètement synonymes.Si vous devez prendre en charge les anciennes versions de PHP, utilisez l'ancienne syntaxe. Il y a aussi un argument pour la lisibilité mais, étant un développeur JS de longue date, ce dernier me semble plutôt naturel. En fait, j'ai fait l'erreur d'essayer d'initialiser des tableaux en utilisant
[]
lorsque j'ai commencé à apprendre PHP.Cette modification de la langue a été initialement proposée et rejetée en raison d'un vote majoritaire contre par les développeurs principaux pour la raison suivante:
Cependant, il semble qu'il y ait eu un changement d'avis menant à 5.4, peut-être influencé par les implémentations de la prise en charge des bases de données populaires comme MongoDB (qui utilisent la syntaxe ECMAScript).
la source
$array = [];
car cela facilite les allers-retours entre JS et PHP.$array = [];
meilleure option ??? ou devrais-je en essayer un autre. lequel est le meilleur[]
c'est juste un peu plus facile à taper.Crée un tableau vide.
Vous pouvez pousser des valeurs sur le tableau plus tard, comme ceci:
À ce stade, $ myArray contient "arbre", "maison" et "chien". Chacune des commandes ci-dessus s'ajoute au tableau, préservant les éléments qui s'y trouvaient déjà.
Venant d'autres langues, cette manière de s'ajouter à un tableau me semblait étrange. Je m'attendais à devoir faire quelque chose comme $ myArray + = "dog" ou quelque chose ... ou peut-être une méthode "add ()" comme les collections Visual Basic. Mais cette syntaxe d'ajout direct est certainement courte et pratique.
Vous devez en fait utiliser la fonction unset () pour supprimer des éléments:
... supprimerait "house" du tableau (les tableaux sont à base zéro).
... détruirait tout le tableau.
Pour être clair, la syntaxe des crochets vides pour l'ajout à un tableau est simplement un moyen de dire à PHP d'affecter automatiquement les index à chaque valeur, plutôt que VOUS d'affecter les index. Sous les couvertures, PHP fait en fait ceci:
Vous pouvez vous-même attribuer des index si vous le souhaitez, et vous pouvez utiliser les nombres que vous souhaitez. Vous pouvez également attribuer des numéros d'index à certains éléments et pas à d'autres. Si vous faites cela, PHP remplira les numéros d'index manquants, en incrémentant à partir du plus grand numéro d'index attribué au fur et à mesure.
Donc, si vous faites cela:
... l'élément "chien" se verra attribuer un numéro d'index de 21. PHP ne fait pas d'appariement de modèle intelligent pour l'affectation incrémentielle d'index, donc il ne saura pas que vous auriez pu vouloir qu'il attribue un index de 30 à "chien" ". Vous pouvez utiliser d'autres fonctions pour spécifier le modèle d'incrémentation d'un tableau. Je n'entrerai pas dans les détails ici, mais tout est dans la documentation PHP.
À votre santé,
- = Cameron
la source
$array[] = 'foo'
fonctionne très bien dans les anciennes versions de PHP. C'est seulement$array = [];
pour initialiser un tableau qui est nouveau en 5.4.Avant PHP 5.4:
PHP 5.4 et supérieur
la source
En PHP, un tableau est un tableau; il n'y a pas de considération primitive vs objet, donc il n'y a pas d'optimisation comparable à avoir.
la source
Ce que vous faites est 100% correct.
En termes de nom agréable, il est souvent fait que les propriétés privées / protégées soient précédées d'un trait de soulignement pour rendre évident qu'elles ne sont pas publiques. Par exemple
private $_arr = array()
oupublic $arr = array()
la source
$this
pour obtenir la valeur et ne devez jamais utiliser les propriétés publiques.$this->arr
et$this->_arr
. Pourquoi ne devriez-vous jamais utiliser des propriétés publiques?!Essaye ça:
la source
Il n'y a pas d'autre moyen , c'est donc le meilleur.Edit: Cette réponse n'est pas valide depuis PHP 5.4 et supérieur.
la source
Initialisation d'un tableau simple:
Initialisation du tableau dans le tableau:
Source: Sorce pour le code
la source