$arr = array(); // is this line needed?
$arr[] = 5;
Ich weiß, dass es ohne die erste Zeile funktioniert, aber es ist oft in der Praxis enthalten.
Was ist der Grund? Ist es ohne es unsicher?
Ich weiß, dass Sie dies auch tun können:
$arr = array(5);
Ich spreche jedoch von Fällen, in denen Sie Elemente einzeln hinzufügen müssen.
$foo = array()
dass es sich nicht um eine Zeichenfolge handelt, die in ein Array usw. umgewandelt wurde).Antworten:
Wenn Sie kein neues Array deklarieren und die Daten, die das Array erstellen / aktualisieren, aus irgendeinem Grund fehlschlagen, wird jeder zukünftige Code, der versucht, das Array zu verwenden,
E_FATAL
funktionieren, da das Array nicht vorhanden ist.foreach()
Wird beispielsweise einen Fehler auslösen, wenn das Array nicht deklariert wurde und keine Werte hinzugefügt wurden. Es treten jedoch keine Fehler auf, wenn das Array einfach leer ist, wie es der Fall wäre, wenn Sie es deklariert hätten.quelle
foreach
Beispiel und die Tatsache, dass ein Fehler ausgelöst wird, anscheinend von der Version von PHP abhängen, die Sie ausführen.Ich wollte nur darauf hinweisen, dass die PHP-Dokumentation in
arrays
der Dokumentation tatsächlich darüber spricht.Von der PHP-Site mit dem dazugehörigen Code-Snippet:
$arr[key] = value; $arr[] = value; // key may be an integer or string // value may be any value of any type
Aber wie in den anderen Antworten angegeben ... sollten Sie wirklich einen Wert für Ihre Variablen deklarieren, da alle möglichen schlechten Dinge passieren können, wenn Sie dies nicht tun.
quelle
PHP ist eine lose getippte Sprache. Es ist vollkommen akzeptabel. Davon abgesehen deklarieren echte Programmierer immer ihre Vars.
quelle
Denken Sie an die Programmierer, die nach Ihnen kommen! Wenn Sie nur sehen
$arr[] = 5
, haben Sie keine Ahnung, was sein$arr
könnte, ohne den gesamten vorhergehenden Code im Bereich zu lesen. Die explizite$arr = array()
Linie macht es klar.quelle
Es ist nur eine gute Übung. Angenommen, Sie haben innerhalb einer Schleife an Ihr Array angehängt (ziemlich übliche Praxis), dann aber außerhalb dieser Schleife auf das Array zugegriffen. Ohne eine Array-Deklaration würde Ihr Code Fehler auslösen, wenn Sie es nie in die Schleife geschafft hätten.
quelle
Ich empfehle dringend, das Array zu deklarieren, bevor Sie Werte hinzufügen. Wenn sich das Array in einer Schleife befindet, können Sie neben allem, was oben erwähnt wurde, unbeabsichtigt Elemente in Ihr Array verschieben. Ich habe gerade beobachtet, dass dies einen kostspieligen Fehler verursacht.
//Example code foreach ($mailboxes as $mailbox){ //loop creating email list to get foreach ($emails as $email){ $arr[] = $email; } //loop to get emails foreach ($arr as $email){ //oops now we're getting other peoples emails //in other mailboxes because we didn't initialize the array } }
quelle
Wenn Sie ein Array vor der Verwendung nicht deklarieren, kann dies zu Problemen führen. Eine Erfahrung, die ich gerade gefunden habe, ich habe dieses Testskript wie folgt aufgerufen: indextest.php? File = 1STLSPGTGUS Dies funktioniert wie erwartet.
//indextest.php?file=1STLSPGTGUS $path['templates'] = './mytemplates/'; $file['template'] = 'myindex.tpl.php'; $file['otherthing'] = 'otherthing'; $file['iamempty'] = ''; print ("path['templates'] = " . $path['templates'] . "<br>"); print ("file['template'] = " . $file['template'] . "<br>"); print ("file['otherthing'] = " . $file['otherthing'] . "<br>"); print ("file['iamempty'] = " . $file['iamempty'] . "<br>"); print ("file['file'] = " . $file['file'] . "<br>");// should give: "Notice: Undefined index: file" print ("file = " . $file);// should give: "Notice: Undefined index: file" //the Output is: /* path['templates'] = ./mytemplates/ file['template'] = myindex.tpl.php file['otherthing'] = otherthing file['iamempty'] = Notice: Undefined index: file in D:\Server\Apache24\htdocs\DeliverText\indextest.php on line 14 file['file'] = Notice: Array to string conversion in D:\Server\Apache24\htdocs\DeliverText\indextest.php on line 15 file = Array */
Jetzt benötige ich nur noch eine Datei aus einem anderen Skript, das ich oben gekauft habe, und wir können sehen, wie die Werte für die Array $ -Datei völlig falsch sind, während der Array $ -Pfad in Ordnung ist: "checkgroup.php" ist der Schuldige.
//indextest.php?file=1STLSPGTGUS require_once($_SERVER['DOCUMENT_ROOT']."/IniConfig.php"); $access = "PUBLIC"; require_once(CONFPATH . "include_secure/checkgroup.php"); $path['templates'] = './mytemplates/'; $file['template'] = 'myindex.tpl.php'; $file['otherthing'] = 'otherthing.php'; $file['iamempty'] = ''; print ("path['templates'] = " . $path['templates'] . "<br>"); print ("file['template'] = " . $file['template'] . "<br>"); print ("file['otherthing'] = " . $file['otherthing'] . "<br>"); print ("file['iamempty'] = " . $file['iamempty'] . "<br>"); print ("file['file'] = " . $file['file'] . "<br>"); print ("file = " . $file); //the Output is: /* path['templates'] = ./mytemplates/ file['template'] = o file['otherthing'] = o file['iamempty'] = o file['file'] = o file = oSTLSPGTGUS */
Das Array vorher initialisieren, dann kein Problem!
//indextest.php?file=1STLSPGTGUS require_once($_SERVER['DOCUMENT_ROOT']."/IniConfig.php"); $access = "PUBLIC"; require_once(CONFPATH . "include_secure/checkgroup.php"); $path = array(); $file = array(); $path['templates'] = './mytemplates/'; $file['template'] = 'myindex.tpl.php'; $file['otherthing'] = 'otherthing.php'; $file['iamempty'] = ''; print ("path['templates'] = " . $path['templates'] . "<br>"); print ("file['template'] = " . $file['template'] . "<br>"); print ("file['otherthing'] = " . $file['otherthing'] . "<br>"); print ("file['iamempty'] = " . $file['iamempty'] . "<br>"); print ("file['file'] = " . $file['file'] . "<br>"); print ("file = " . $file); //the Output is: /* path['templates'] = ./mytemplates/ file['template'] = myindex.tpl.php file['otherthing'] = otherthing.php file['iamempty'] = file['file'] = file = Array */
Auf diese Weise wurde mir klar, wie wichtig es ist, Variablen zu initialisieren, da wir nie wissen, mit welchem Problem wir später enden könnten, und nur um Zeit zu sparen, verschwenden wir am Ende möglicherweise noch mehr. Ich hoffe, dass dies für diejenigen wie mich hilfreich ist, die nicht professionell sind.
quelle
Alte Frage, aber ich teile dies, da dies ein Anwendungsfall ist, in dem Code einfacher ist, wenn Arrays nicht deklariert sind.
Angenommen, Sie haben eine Liste von Objekten, die Sie für eine ihrer Eigenschaften indizieren müssen.
// $list is array of objects, all having $key property. $index = []; foreach ($list as $item) $index[$item->key][] = $item; // Dont care if $index[$item->key] already exists or not.
quelle
Dies hängt von Ihrer Fehlerprüfung ab. Wenn Sie eine Fehlermeldung für strikt haben, erhalten Sie eine Benachrichtigung, die jedoch technisch immer noch ohne diese Funktion funktionieren sollte.
quelle
Dies ist gut, wenn Sie es als globale Variable benötigen oder dasselbe Array in verschiedenen Funktionen immer wieder verwenden möchten
quelle
Dies ist Ihr Code
$var[] = 2; print_r($var)
Funktioniert gut! bis jemand den gleichen Variablennamen vor Ihrem charmanten Code deklariert
$var = 3; $var[] = 2; print_r($var)
Hoppla!
Dies ist ein möglicher (manchmal unvorhersehbarer) Fall, daher wird ja
$var = array()
benötigt$var = 3; $var = array(); $var[] = 2; print_r($var)
Ausgabe
Array ( [0] => 2 )
quelle
Stimmen Sie mit @djdy überein, nur eine Alternative, die ich gerne posten würde:
<?php // Passed array is empty, so we'll never have $items variable available. foreach (array() AS $item) $items[] = $item; isset($items) OR $items = array(); // Declare $items variable if it doesn't exist ?>
quelle