« Nieuwe sites | Num Lock uitschakelen » |
Nieuw in PHP 5.4: Array's
Nu er een beta verschenen is van PHP 5.4 is het onderhand tijd om eens te kijken naar de nieuwe features ten opzichte van zijn voorlopers.
PHP 5.3 wordt op het moment nog lang niet op alle servers gebruikt. Indertijd, intussen al weer een ruime 2 jaar geleden, bleken er zoveel verschillen te zijn met de PHP 5.2 branch, dat veel hosters voorlopig nog niet overgegaan zijn naar 5.3. Mensen die nog op 5.2 zijn blijven plakken, missen natuurlijk ook nog de features die bij 5.3 zijn toegevoegd. Bijvoorbeeld de namespaces en late static binding.
In een komende reeks posts zal ik een aantal nieuwe features van PHP 5.4 behandelen. Niet noodzakelijk in de volgorde die hieronder staat.
1 Nieuwe array zaken
2 Traits
3 Closures
4 Upload progress
5 Deprecations
6 Ingebouwde http-server
7 Wat missen we nog
1. Nieuwe zaken mbt array's
Nieuwe syntax voor definitie
Vanaf php 5.4 kunnen array's op een andere manier gedefinieerd worden. De syntax is iets korter en mist de kreet "array". Of de code er leesbaarder van wordt, valt te betwijfelen, maar mogelijk is het ook een geval van gewenning. De syntax is in elk geval geleend uit andere talen, bijvoorbeeld javascript.
<?php $a = array(1, 2, 3); $b = [1, 2, 3]; $a = array('aap' => 10, 'noot' => 20, 'mies' => 30); $b = ['aap' => 10, 'noot' => 20, 'mies' => 30]; $a = array('aap' => 10, 8, 5, 'noot' => 20, 'mies' => 30); $b = ['aap' => 10, 8, 5, 'noot' => 20, 'mies' => 30];
Functies als array aanspreken
Wanneer een functie een array retourneert dan moesten we tot nu het resultaat eerst opslaan in een variabele, ook wanneer we vooraf al weten dat we array-element 2 nodig hebben. Dat is nu niet langer nodig:
Eerst de oude syntax:
<?php
function bla() { return array('aap', 'noot', 'mies'); } $a = bla(); echo $a[1]; // geeft noot
In PHP 5.4 kunnen we scripten:
<?php
function bla() { return ['aap', 'noot', 'mies']; } echo bla()[1]; // geeft noot
Dit werkt ook met associatieve array's:
function bla() { return ['aap'=> 'AAP', 'noot' =>'NOOT', 'mies' => 'MIES']; } echo bla()['noot']; // geeft NOOT
In plaats van een functie kan ook een method uit een klas aangesproken worden: $o->blaat()[4] zal dus ook een mogelijkheid zijn.
Nadeel is wel, dat als je meerdere elementen uit een array wilt gebruiken, deze notatie zorgt dat je de functie meerdere keren aanspreekt en dus ook meerdere keren uitvoert. Tenzij de functie op de een of andere manier zijn resultaten cachet, kan dat dus slecht uitpakken voor de prestaties van de site:
<?php
function zwaar() { return mysql_fetch_assoc( mysql_query("SELECT straat, stad FROM grotetabel")); } echo zwaar()['straat']; echo zwaar()['stad'];
Tot zo ver.
De volgende posting zal over Traits gaan.