25
2011
Kurzschreibweise für Arrays ab PHP 5.4
In anderen Programmiersprachen gibt es die Kurzschreibweise für Arrays ja schon etwas länger. In PHP muss man darauf verzichten, doch mit PHP 5.4 ändert sich das.
Am Samstag hatte Pierre Joyce via Twitter bekannt gegeben, dass die “Short array syntax” ab sofort im SVN von PHP 5.4 verfügbar ist.
Short array syntax support is now in SVN, #php 5.4+, http://is.gd/NFSTpn snaps with rev. 313641 or higher should follow (src or bins snaps).
Normale Syntax für Arrays in PHP:
$foo = array('foo', 'bar');
print_r($foo);
Array
(
[0] => foo
[1] => bar
)
$bar = array('foo' => 'bar');
print_r($bar);
Array
(
[foo] => bar
)
Short Syntax für Arrays ab PHP 5.4:
$foo = ['foo', 'bar'];
print_r($foo);
Array
(
[0] => foo
[1] => bar
)
$bar = ['foo' => 'bar'];
print_r($bar);
Array
(
[foo] => bar
)
PHP 5.4 ist aktuell im Alpha 2 Stadium und steht auf http://qa.php.net/ zum Download bereit.
von








Bei assoziativen Arrays hätte ich folgende Schreibweise ja intuitiver gehalten:
$array = {'key' : 'value'
}
@Max
{} => Objekte
[] => Arrays
Hm, stimmt, in JavaScript gibt es ja keine assoziativen Arrays, sondern nur Objekte.. Mal wieder nicht genug nachgedacht.
@Oliver: das ist doch nur JSON mit {} => Objekte oder wie meinst du das?
@Max: intuitiver finde ich schon eher => weil es einfach wie die bisherige PHP Syntax ist.
Ich freu mich auf jedenfalls auf die neue Syntax, vereinfacht einiges, weniger Schreibaufwand und insgesamt einfach übersichtlicher, gerade wenn man große verschachtelte Arrays verwendet.
Viel mehr als auf diese Schreibweise freue ich mich auf den Array dereferencing Support.
<?php function foo() { return array(1, 2, 3); } echo foo()[2]; // prints 3 ?><?php $data = array('me', 'myself', 'you'); function &get_data() { return $GLOBALS['data']; } get_data()[2] = 'I'; // $data will now contain 'me', 'myself' and 'I' ?>Jop, das finde ich auch extremü nützlich
hi,
was ich in diesem Context viel interessanter finden würde wäre die verwendung solcher short-hand associativen arrays als parameter-übergabe für funktionen/methoden so wie es momentan auch in jQuery funktioniert. Beispiel:
‘/var/www/somefile.txt’,
‘content’ => $content,
‘mode’ => 0775
]);
?>
Nie mehr Parameter-Reihenfolgen nachschlagen und unbenutze Parameter (eventuell sogar falsch) übergehen müssen, das wär doch mal cool.
@Gerrit:
Was steht dir da im Weg. Kann man ja so programmieren
Ist ja nur eine Art um Objekte zz initialisieren…..
lg
@Gerrit: da würde ich persönlich aber lieber Value-Objects oder das Command-Pattern anwenden. Das ist übersichtlicher. Andernfalls müsste man jeden Parameter dieses Arrays in der Dokumentation erläutern und das wäre ja kontraproduktiv. Außerdem müsste man sonst fehlende Pflichtfelder im Code von Hand abfangen. Das mag bei 100-Zeilen Skripten vielleicht noch gehen. Aber ich für meinen Teil habe 250 Klassen und da will ich Ordnung haben.
Ich freue mich vor allem auf Type-Hints für skalare Typen. Das wurde wirklich mal Zeit! Endlich muss man das nicht mehr von Hand prüfen.
@Tom: Skalare Datentypen waren meines Wissens nie im Gespräch für 5.4. Was aber zur Diskussion stand war ob man primitive Datentypen zu Reserved Words macht. Das wurde aber wegen der Backward Compatibility verworfen.
Müssen wir also weiterhin von Hand prüfen
Endlich! PHP mausert sich Stück für Stück zu einer vollwertigen Programmiersprache!
Naja, war eher Gedankenspielerei. Ich denke nicht das sich so etwas in nächster Zeit im PHP-Großraum etablieren wird, leider. Trotzdem freue ich mich über die neue Schreibweise.
Und ich sehe gerade das der Anfang vom Code gefressen wurde. Welche Syntax für Code wird denn hier verwendet? BB-Code?
Du kannst in den Kommentaren HTML-Code verwenden, bzw. nutzen wir hier auch das SyntaxHighlighter Plugin.
[ code ]dein code[ /code ](ohne Leerzeichen)Ah, Danke.
Dann hier nochmal der vollständigkeitshalber die richtige Version:
<?php schreibeDatei([ 'path' => '/var/www/file.txt', 'content' => $content, 'mode' => 0775 ]); ?>@Gerrit: So in der Art mach ich das häufig, sofern die Anzahl der Parameter etwas mehr wird…
schreibeDatei([ 'path' => '/var/www/file.txt', 'content' => $content, 'mode' => 0775 ]); function schreibeDatei($params) { $defaultParams = [ 'path' => null, 'content' => null, 'mode' => 0755, ]; $params = array_merge($defaultParams, $params); // do some stufff.. }Hat sich bewährt.. CakePHP nutzt das auch ziemlich exzessiv…
Gruß,
Max
Ich kenne das genauso und werde mir wohl CakePHP noch etwas genauer anschauen müssen.
Danke für den Hinweis.
Sehr schön! Am interessantesten sind aber Traits, die mit 5.4 kommen