329 votes

Meilleur moyen d'initialiser (vide) le tableau en PHP

Dans certains autres langages (AS3 par exemple), l'initialisation d'un nouveau tableau est plus rapide si elle est effectuée comme ceci var foo = [] plutôt que var foo = new Array() pour des raisons de création d'objet et d'instanciation. Je me demande s'il existe des équivalences en PHP?

 class Foo {
    private $arr = array(); // is there another / better way?
}
 

208voto

Andy E Points 132925

Dans ECMAScript implémentations (par exemple, ActionScript ou JavaScript), Array() est un constructeur de la fonction et de l' [] fait partie de l'littéral de tableau de grammaire. Les deux sont optimisés et exécutées de façons complètement différentes, avec la traduction littérale de la grammaire ne pas être accablé par la surcharge de l'appel d'une fonction.

PHP, d'autre part, a des constructions d'un langage qui peuvent ressembler à des fonctions, mais ne sont pas traités en tant que tels. Même avec PHP 5.4, qui soutient [] comme une alternative, il n'y a pas de différence dans les frais généraux, car, aussi loin que le compilateur/parser est concerné, ils en sont totalement synonymes.

// Before 5.4, you could only write
$array = array(
    "foo" => "bar",
    "bar" => "foo",
);

// As of PHP 5.4, the following is synonymous with the above
$array = [
    "foo" => "bar",
    "bar" => "foo",
];

Si vous avez besoin de prendre en charge les anciennes versions de PHP, utiliser l'ancienne syntaxe. Il y a aussi un argument pour des raisons de lisibilité, mais, étant un long temps JS promoteur, ce dernier semble assez naturel pour moi. J'ai effectivement fait l'erreur d'essayer d'initialiser les tableaux à l'aide d' [] lorsque j'ai commencé à apprendre le PHP.

Ce changement de la langue a été initialement proposée et rejetée en raison d'un vote à la majorité contre par les développeurs du noyau avec la raison suivante:

Ce patch ne sera pas acceptée parce légère majorité de la les développeurs du noyau ont voté contre. Mais si vous prenez un accumulé une moyenne entre les développeurs du noyau et l'espace utilisateur voix semble montrer le contraire, il serait irresponsable de soumettre un patch de sorcière n'est pas pris en charge ou maintenus dans le long terme.

Cependant, il semble qu'il y avait un changement de cœur menant à 5.4, peut-être influencé par les implémentations de support pour les bases de données populaires comme MongoDB (qui utilisent ECMAScript syntaxe).

26voto

Adrian Points 2692

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.

20voto

James C Points 9120

Ce que vous faites est correct à 100%.

Pour ce qui est des noms, il est fréquent que les propriétés privées / protégées soient précédées d’un trait de soulignement pour indiquer qu’elles ne sont pas publiques. Par exemple private $_arr = array() ou public $arr = array()

4voto

Matthieu Napoli Points 9453

Il n'y a pas d'autre moyen , donc c'est le meilleur.

Edit: Cette réponse n'est pas valide depuis PHP 5.4 et supérieur.

4voto

Pyetro Points 21

Essaye ça:

     $arr = (array) null;
    var_dump($arr);

    // will print
    // array(0) { }
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X