In bestimmten anderen Sprachen (z. B. AS3) wurde festgestellt, dass die Initialisierung eines neuen Arrays schneller ist, wenn dies so erfolgt, var foo = []
als var foo = new Array()
aus Gründen der Objekterstellung und -instanziierung. Ich frage mich, ob es in PHP Äquivalenzen gibt.
class Foo {
private $arr = array(); // is there another / better way?
}
php
arrays
initialization
Tom Auger
quelle
quelle
array_fill
? php.net/manual/en/function.array-fill.php$arr = array()
oder$arr = []
Antworten:
In ECMAScript-Implementierungen (z. B. ActionScript oder JavaScript)
Array()
ist dies eine Konstruktorfunktion und[]
Teil der Array-Literal-Grammatik. Beide werden auf völlig unterschiedliche Weise optimiert und ausgeführt, wobei die wörtliche Grammatik nicht durch den Aufwand beim Aufrufen einer Funktion beeinträchtigt wird.PHP hingegen verfügt über Sprachkonstrukte, die wie Funktionen aussehen, aber nicht als solche behandelt werden. Selbst mit PHP 5.4, das
[]
als Alternative unterstützt wird, gibt es keinen Unterschied im Overhead, da sie für den Compiler / Parser völlig synonym sind.Wenn Sie ältere Versionen von PHP unterstützen müssen, verwenden Sie die frühere Syntax. Es gibt auch ein Argument für Lesbarkeit, aber als langjähriger JS-Entwickler erscheint mir letzteres ziemlich natürlich. Ich habe tatsächlich den Fehler gemacht, Arrays mit zu initialisieren,
[]
als ich PHP zum ersten Mal lernte.Diese Änderung der Sprache wurde ursprünglich vorgeschlagen und aufgrund einer Mehrheitsentscheidung der Kernentwickler aus folgendem Grund abgelehnt:
Es scheint jedoch, dass sich das Herz bis 5.4 geändert hat, was möglicherweise durch die Implementierung der Unterstützung für gängige Datenbanken wie MongoDB (die ECMAScript-Syntax verwenden) beeinflusst wurde.
quelle
$array = [];
da es das Hin- und Herwechseln zwischen JS und PHP erleichtert.$array = [];
bessere Option? oder sollte ich es mit einem anderen versuchen. welches ist besser[]
sind nur ein wenig einfacher zu tippen.Erstellt ein leeres Array.
Sie können Werte später wie folgt auf das Array übertragen:
Zu diesem Zeitpunkt enthält $ myArray "Baum", "Haus" und "Hund". Jeder der oben genannten Befehle wird an das Array angehängt, wobei die bereits vorhandenen Elemente beibehalten werden.
Da ich aus anderen Sprachen stamme, kam mir diese Art des Anhängens an ein Array seltsam vor. Ich hatte erwartet, etwas wie $ myArray + = "dog" oder so etwas tun zu müssen ... oder vielleicht eine "add ()" - Methode wie Visual Basic-Sammlungen. Aber diese Syntax zum direkten Anhängen ist sicherlich kurz und bequem.
Sie müssen tatsächlich die Funktion unset () verwenden, um Elemente zu entfernen:
... würde "house" aus dem Array entfernen (Arrays sind nullbasiert).
... würde das gesamte Array zerstören.
Um es klar auszudrücken, ist die Syntax der leeren eckigen Klammern zum Anhängen an ein Array lediglich eine Möglichkeit, PHP anzuweisen, die Indizes jedem Wert automatisch zuzuweisen, anstatt dass SIE die Indizes zuweisen. Unter dem Deckmantel macht PHP tatsächlich Folgendes:
Sie können selbst Indizes zuweisen, wenn Sie möchten, und Sie können beliebige Zahlen verwenden. Sie können einigen Elementen auch Indexnummern zuweisen und anderen nicht. Wenn Sie dies tun, füllt PHP die fehlenden Indexnummern aus und erhöht sie von der größten zugewiesenen Indexnummer.
Wenn Sie dies tun:
... dem Element "Hund" wird eine Indexnummer von 21 zugewiesen. PHP führt keinen intelligenten Mustervergleich für die inkrementelle Indexzuweisung durch, sodass es nicht weiß, dass Sie möglicherweise gewünscht haben, dass es "Hund" einen Index von 30 zuweist ". Sie können andere Funktionen verwenden, um das Inkrementmuster für ein Array anzugeben. Ich werde hier nicht darauf eingehen, aber es ist alles in den PHP-Dokumenten.
Prost,
- = Cameron
quelle
$array[] = 'foo'
funktioniert gut in älteren Versionen von PHP. Es wird nur$array = [];
ein Array initialisiert, das in 5.4 neu ist.Vor PHP 5.4:
PHP 5.4 und höher
quelle
In PHP ist ein Array ein Array. Es gibt keine primitive oder objektbezogene Betrachtung, daher ist keine vergleichbare Optimierung möglich.
quelle
Was Sie tun, ist 100% richtig.
In Bezug auf nette Namen wird häufig darauf hingewiesen, dass privaten / geschützten Eigenschaften ein Unterstrich vorangestellt wird, um zu verdeutlichen, dass sie nicht öffentlich sind. ZB
private $_arr = array()
oderpublic $arr = array()
quelle
$this
, um den Wert zu erhalten, und niemals öffentliche Eigenschaften verwenden sollten.$this->arr
und$this->_arr
. Warum sollten Sie niemals öffentliche Immobilien nutzen?!Versuche dies:
quelle
Es gibt keinen anderen Weg , also ist dies der beste.Bearbeiten: Diese Antwort ist seit PHP 5.4 und höher nicht gültig.
quelle
Initialisieren eines einfachen Arrays:
Array innerhalb des Arrays initialisieren:
Quelle: Sorce für den Code
quelle