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

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

Napište komentář!

 

o autorovi:

další projekty

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

tadá

poslední články

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
Zavřete oči a poslouchejte, hraje Mono
hudební článek | 31. října 2016

poslední komentáře

Donnie Darko
chenyingyingchenyingying | 24. března 2017
Nette@home
chenyingyingchenyingying | 24. března 2017
BotTorrent? Využití BitTorrentu jako nástroje pro DDoS útoky
chenyingyingchenyingying | 24. března 2017
The Piracetam Diary
chenyingyingchenyingying | 24. března 2017
Rasismus, xenofobie a náboženství
chenyingyingchenyingying | 24. března 2017
With a bit of luck, his life was ruined forever
chenyingyingchenyingying | 24. března 2017
Dívka, která milovala mraky
chenyingyingchenyingying | 24. března 2017

K47i © 2002 - 2017 K. aka Kaja47