{PHP} function-return-array

Ik heb dit concept al eens gepost op een andere blog maar vind dat deze niet mag ontbreken om mijn blog. Dit concept wordt niet zo goed onthaalt in de PHP wereld en ik weet niet waarom. Het concept gaat als volgt. Je hebt een functie die een array teruggeeft. Om de één of andere redenen willen we maar een bepaalde element van de teruggegeven array opvragen. In PHP moeten we daarvoor twee lijnen schrijven.

<?php

$explode = explode(‘/’ , $_SERVER[‘REQUEST_URI’]);

echo $explode[0]; //output: http

?>

Zo bevat $explode nu een hele rij met elementen die we niet gebruiken, gevolg is dat er data in het geheugen staat dat niet gebruikt wordt. De talen zoals Java, C, Perl, Python, Ruby, Javascript, etc ondersteunen dit wel en dus kan je in die talen ook het volgende gebruiken.

<script>

alert( window.location.href.split(‘/’)[0] ); //output: http

</script>

Dit heeft je nu een lijntje code bespaard en een reeks van geheugen plaatsen. In PHP zou dit dan als volgt eruit zien.

<?php

echo explode(‘/’ , $_SERVER[‘REQUEST_URI’])[0]; //output: http

?>

Waarom de PHP community hierover problemen maakt, versta ik niet. Het zal waarschijnlijk de frustratie zijn dat zijzelf niet op het idee gekomen zijn om dit concept in PHP te maken of omdat ze het niet kunnen implementeren in de Zend engine. Iemand van de PHP wereld zei nog het volgende erover.

I don’t know why it isn’t supported by PHP, but I suspect it is related
to the type-concept.

Die snapt het niet omdat dit niet type afhankelijk is. Hieronder staan nog enkele voorbeeldjes voor de function-return-array concept.

<?php

echo $obj->getObjects()[2]->getName();

echo getPlugins()[‘MediaPlugin’]; //array( ‘MediaPlugin’ => … )

$slice = explode(‘-‘ , $string)[0,2,7];

?>

6 Responses to {PHP} function-return-array

  1. Rolandow says:

    Dit was precies wat ik wilde gebruiken. Is er inmiddels al een oplossing voor, of zal het nooit ingebouwd gaan worden in PHP?

  2. stijn1989 says:

    Ik heb een topic geopend op de maillist van php.net en volgens hun antwoorden zal het niet ingebouwd worden, spijtig genoeg.

  3. Bart says:

    HELEMAAL mee eens! Was dit probleem al vaker tegengekomen en dacht dat ik in PHP een andere syntax zou moeten gebruiken. Toen ik daar na de bekende druppel maar eens naar op zoek ging kwam ik deze post tegen. Blijkt dat het dus echt niet kan met PHP. Wat een zootje rukkers!

  4. Bart says:

    Oh en btw waarom zouden ze dat niet inbouwen… je kunt wel waarden direct uit een door een functie geturneerde array halen met current(), end() etc etc…

    Dwazen zijn het…. :)

  5. stijn1989 says:

    Die current() en end() komen van een ArrayIterator. Da’s iets anders.

  6. Pingback: Array dereferencing in PHP 5.4.0! « Another (Idiot) Intelligent Developing Software

Plaats een reactie