přihlásit se
k47.cz
V případě náhodného požití vyvolejte zvracení

PHP 5.4

autor: kaja47 - CC by-nc-sa - publikováno: - sekce obsah » programování #2403
štítky: a
Tento článek obsahuje zhruba 500 slov a jeho přečtení Vám zabere 2 až 5 minut

Po téměř třech letech vyšla finální verze PHP 5.4, která přináší mnoho novinek. Tady jsou ty nejzajímavější.

Pole

Pole dostala novou kompaktní syntaxi:

[19, 5, 2013]
['Mortis Arytmia' => 7, 'Terminalita' => 41]

Konečně můžeme dereferencovat pole a už nemusíme laborovat s dočasnými proměnnými, když chceme použít jenom něco z vráceného pole

// postaru:
$ex = explode(',', $str);
$a = $ex[0];

// postaru, ale trochu vynalézavěji:
list($a) = explode(',', $str);

// nově:
$a = explode(',', $str)[0];

Ale na druhou stranu nefunguje identická konstrukce s funkcemi. Takže currying musíme nechat u ledu.

func($arg)($arg2)

Funkce

Konečně můžeme vytvořit objekt a hned na něm zavolat nějakou metodu bez rošád s dočasnými proměnnými.

(new Person)->runAway();

Přibyl nový typehint callable, který zahrnuje anonymní funkce (třída Closure), všechny objekty mající metodu __invoke, a pseudotyp callable ve formách "functionName", array($object, 'method') a array('Classs', 'method').

function map($collection, callable $f) { /* ... */ }

Syntaxe $f() funguje i když je $f pole ve tvaru array($obj, 'method'). Minulá verze PHP si v tomhle případě stěžovala a bylo se nutné uchýlit k obezličce call_user_func, která má mimořádný talent znepřehlednit kód (například v Atrox\Arr jsem na to rezignoval s tím, že věci v 5.3 můžou můžou zlobit).

Velkou novinkou je, že anonymní funkce definované v těle třídy mají přístup k proměnné $this aktuální instance. Nemusíme ji ručně importovat do scope funkce a navíc máme přístup k privátním členům objektu i jeho třídy, tedy přesně jako kdyby closure byla metodou třídy.

//dříve:
$self = $this;
function ($args) use($self) {
  return $self->method($args);
}

//teď:
function ($args) {
  return $this->method($args);
}

Třída Closure, která implementuje anonymní funkce, dostala novou metodu bindTo, pomocí, které můžeme změnit instanci na kterou je navázená proměnná $this uvnitř anonymní funkce. Nevím proč něco takového přidávali, protože se to dá velice snadno zneužít pro přístup k soukromým proměnným libovolného objektu bez použití reflexe.

class Person {
  private $name = "Karel", $surname = "Kalandra", $powerLevel = 9001;
}

$fuckEverything = function() {
  foreach (get_object_vars($this) as $prop => $val)
    $this->$prop = "U DUN GOOFED!";
};

$person = new Person;
$fuckEverything = $fuckEverything->bindTo($person, $person);
$fuckEverything();

var_dump($person); // U DUN GOOFED!

Traity

Poslední novinkou (a pravděpodobně tou největší v 5.4) jsou traity, které umožní znovupoužití kódu mimo strom dědičnosti. Nejde o žádné složitosti, jenom jazykem asistovaný copy-paste skupiny metod. Traity si s sebou nenesou žádný typ, nemají stav, neprobíhá žádná linearizace, takže se všechny konflikty se musejí vyřešit ručně a jeden trait nemůže „dekorovat“ metody jiného traitu.

trait PropertyAsMethod {
  function __get($name) {
    return $this->$name();
  }
}

class Person {
  use PropertyAsMethod; // použijeme trait

  function runAway() {
    var_dump("Přes kopce a daleko, daleko, do Západních zemí.");
  }
}

$person = new Person;
$person->runAway(); // normálně
$person->runAway;   // funkcionalita získaná z traitu PropertyAsMethod

komentáře RSS

Zatím žádné komentáře. Buďte první.
Komentář bude formátován pomocí Texy! syntaxe.
Např: **tučný text**, *kurzíva*, "text odkazu":adresa.
Na ostatní komentáře můžete odkazovat pomocí [čísla komentáře].

Napište komentář!

 

o autorovi:

K. Jmenuji se Karel Čížex, v síti také známý jako kaja47 - tak trochu spisovatel, trochu programátor, trochu webař, milovník divné hudby atd atd.
mail:
jabber: kaja47@jabbim.cz

další projekty

wyhledawacz fel.log stalkr vtipy.k47.cz k47.shop Zkracovač adres stripbot

živě z twitteru

CoVim – Collaborative Editing for Vim http://t.co/zIv1EzCEUv
Malý trik pro všechny, kdo píšou v PHP víc funkcionálního kódu než jim nařídil jejich doktor https://t.co/T5Xj1lhryR
Všechno, co jste chtěli vědět o kvantových počítačích, ale báli jste se zeptat. http://t.co/HGK8sKdEfu
"Data Structures in Riak" http://t.co/TKfEonFdHY - pojmy dne: CRDT a monotonní logika
Linear vs Binary Search http://t.co/NZi16lpdGT

tadá

poslední články

Kdo nečte s námi, čte proti nám
článek | 30. dubna 2013
Oldboy
film | 13. dubna 2013
Jon Richardson vs. Sean Lock
článek | 4. dubna 2013
Zvuky!
článek | 29. března 2013
Co všechno neexistovalo, když jsem začínal s k47čkou
interní článek | 25. března 2013
Kdyby se někdo ptal, zapírej
| 17. března 2013
Horečka #4
povídka | 17. března 2013
Horečka #3
povídka | 17. března 2013
Horečka #2
povídka | 17. března 2013

poslední komentáře

Horečka #1
adam | 9. května 2013
Futurama
Saja | 21. března 2013
Skupinová samomluva 4
kaja47 | 16. března 2013
Skupinová samomluva 4
Lisured | 15. března 2013
Parazit
Lisured | 15. března 2013

největší kecalové

Lisured Lisured
Daniel Daniel
jardik jardik

K47i © 2002 - 2013 K. aka Kaja47