k47.cz

PHP 5.4

autor: kaja47 - CC by-nc-sa - publikováno: - sekce obsah » programování #2403
štítky: a

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

2 komentáře a můžete napsat další
chenyingyingchenyingying
24. března 2017 10:15 #1317
chenyingyingchenyingying píše…

longchamp handbags

fitflops shoes

polo ralph lauren

nike cortez shoes

burberry handbags

michael kors outlet

polo ralph lauren outlet

nfl jerseys wholesale

ralph lauren shirts

christian louboutin sneakers

cheap nhl jerseys

ray ban outlet

oakley sunglasses outlet

oakley sunglasses

coach outlet

nike roshe run

michael kors bags

coach outlet

gucci outlet

coach outlet

adidas nmd

michael kors outlet online

jordan shoes

tiffany jewelry

pandora charms

adidas shoes

michael kors outlet

adidas shoes

ralph lauren outlet

longchamp bags

cheap ray ban sunglasses

nike air force 1 low

oakley vault

coach outlet online

adidas yeezy boost 350 v2

pandora jewelry

cheap ray bans

coach outlet online

christian louboutin sale

ray ban wayfarer

pandora charms

john terry jersey

pandora rings

north face outlet

coach outlet

adidas nmd shoes

lebron 13 shoes

mlb jerseys wholesale

coach outlet

adidas nmd r1

oakley sunglasses outlet

oakley sunglasses cheap

ray ban wayfarer

beats by dre

pandora outlet

ralph lauren polo

ray ban sunglasses uk

ray ban clubmaster

christian louboutin outlet

adidas nitrocharge

nhl jerseys wholesale

nike store

polo ralph lauren

adidas f50

cheap ray ban sunglasses

fred perry polo shirts

oakley sunglasses sale

kate spade sale

michael kors outlet store

true religion jeans

prada handbags

michael kors handbags

levi's jeans

ralph lauren outlet

hermes kelly bag

true religion jeans

birkenstock sale clearance

lee jeans outlet

christian louboutin sneakers

adidas outlet

michael kors handbags

hermes handbags

toms outlet

tory burch handbags

oakley sunglasses outlet

timberland boots uk

reebok outlet

ralph lauren outlet

chaussures louboutin

birkenstock shoes

michael kors outlet clearance

toms shoes

nike outlet

nike jordan shoes

air max 2016

vans outlet

vans outlet

ray ban wayfarer sunglasses

nike huarache shoes

ray ban sunglasses

chenyingying20170325
chenlili
28. března 2017 5:44 #1476
chenlili píše…

ray ban sunglasses

coach outlet

polo ralph lauren outlet online

nike shoes for men

true religion jeans

christian louboutin outlet

cheap mlb jerseys

ray ban sunglasses

cheap jordans

oakley sunglasses

polo outlet

cheap ray ban sunglasses

yeezy boost

polo ralph lauren outlet online

mlb jerseys wholesale

mcm outlet

pandora jewelry

christian louboutin

fred perry outlet

air jordan 4

kate spade outlet

kate spade outlet store

adidas yeezy shoes

asics running shoes

nike shoes

mbt shoes

michael kors outlet

oakley sunglasses wholesale

ralph lauren outlet

polo outlet

cheap ray bans sunglasses

christian louboutin shoes

ed hardy clothing

coach factory outlet

kate spade handbags

fitflops sale clearance

michael kors outlet clearance

nike shoes

kate spade outlet store

ray ban sunglasses

coach factory outlet

michael kors outlet

prada outlet

michael kors outlet

polo ralph lauren outlet online

nike shoes outlet

michael kors outlet clearance

coach factory outlet

michael kors outlet clearance

cheap jordans

adidas outlet

lacoste outlet

adidas outlet

polo ralph lauren outlet online

polo outlet

prada outlet

coach factory outlet

michael kors outlet

coach outlet

coach factory outlet

oakley sunglasses

michael kors outlet

air jordan shoes

oakley sunglasses wholesale

yeezy boost

nike outlet

michael kors handbags

mbt shoes

oakley sunglasses

ray ban sunglasses

nike shoes

nike outlet store

coach factory outlet

nike shoes

fitflops sale clearance

true religion jeans

polo outlet

coach outlet online

michael kors outlet

ray ban sunglasses on sale

mont blanc pens

longchamp outlet

adidas nmd

ralph lauren polo

cheap oakley sunglasses

pandora outlet

oakley sunglasses

oakley sunglasses wholesale

coach outlet online

ray ban sunglasses outlet

adidas shoes

true religion outlet

michael kors outlet clearance

adidas yeezy

coach outlet

mlb jerseys

pandora outlet

coach outlet online

fitflops sale clearance

coach factory outlet

pandora jewelry

nfl jerseys

cheap jordans

adidas yeezy

true religion outlet store

longchamp outlet

michael kors outlet

chenlili20170328

Napište komentář!

 

o autorovi:

další projekty

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

tadá

poslední články

KAMSSKSR
| 25. března 2017
I should have danced on that Astronautalis concert
hudební článek | 28. února 2017
ASCII blog
| 6. února 2017
Západní země
hudební článek | 2. ledna 2017
Russian Circles stahují kruhy
hudební článek | 7. prosince 2016
65daysofstatic - první a poslední
hudební článek | 15. listopadu 2016

poslední komentáře

669e15
meadc | 21. dubna 2017
669.246
meadc | 21. dubna 2017
MySQL group by trik
meadc | 21. dubna 2017
669.335
meadc | 21. dubna 2017
669.264
meadc | 21. dubna 2017
669.102
meadc | 21. dubna 2017
Naivní holka
meadc | 21. dubna 2017

K47i © 2002 - 2017 K. aka Kaja47