php 5.4: die wichtigsten neuerungen im Überblick

Post on 06-Dec-2014

3.224 Views

Category:

Technology

2 Downloads

Preview:

Click to see full reader

DESCRIPTION

Die wichtigsten Neuerungen von PHP 5.4, insbesondere Traits, werden vorgestellt. Ein Videostream zu diesem Talk ist unter http://www.ustream.tv/recorded/21104071/highlight/251550 zu sehen.

TRANSCRIPT

PHP 5.4Die wichtigsten Neuerungen im Überblick

@ManuelKiessling

SHORT ARRAY SYNTAX

$a = array(‘a‘, ‘b‘, ‘c‘);

$a = [‘a‘, ‘b‘, ‘c‘];

$a = ['one' => 1, 'two' => 2];

FUNCTION ARRAY DEREFERENCING

function foo() { return array(1, 2, 3);}

echo foo()[2]; // prints 3

CLASS MEMBER ACCESS ON INSTANTIATION

class Foo {public function bar() {

echo ‘foobar’; }}

(new Foo)->bar(); // foobar

TRAITS

“The best way to understand what traits are and how to use them is to look at them for what they essentially are: language assisted copy and paste.

If you can copy and paste the code from one class to another then you have a candidate for a trait.”

TRAITS

User Item

Verhalten: login()order()

buy()ship()

pay()changeColor()

Aspekt: logginglogging

Unterschiedlich Klassen implementieren unterschiedliches Verhalten – aber es gibt einige Aspekte, die in praktisch allen Klassen eines Systems implementiert werden sollen.

TRAITS

class User {public function login() {

//...$this->logger->log(‘login’, $user->name,

time());}

}

class Item {public function ship() {

//...$this->logger->log(‘shipped’, $item->id,

time());}

}

TRAITS

User Item

Verhalten: login()order()

buy()ship()

pay()changeColor()

Aspekt: logginglogging

Unterschiedlich Klassen implementieren unterschiedliches Verhalten – aber es gibt einige Aspekte, die in praktisch allen

Klassen eines Systems implementiert werden sollen.

TRAITS

Was, wenn das logger Objekt ab sofort den Zeitstempel als ersten Parameter erwartet?

Wie verhindern wir, dass wir in allen Klassen, die den Logger verwenden, den Code anpassen

müssen?

TRAITSVariante 1: Gemeinsame Vererbung

User Item

LoggableObjectlog()

$this->log() $this->log()

TRAITSclass LoggableObject { public function log(event, identifier, timestamp) { $this->logger->log(event, identifier, timestamp); }}

class User extends LoggableObject { public function login() { //... $this->log(‘login’, $user->name, time()); }}

Class Item extends LoggableObject { public function ship() { //... $this->log(‘login’, $item->id, time()); }}

TRAITS

Was, wenn wir einen zweiten Aspekt haben?

User Item

Verhalten: login()order()

buy()ship()

pay()changeColor()

Aspekt: logginglogging

profilingprofiling

TRAITSVariante 1: Mehrfachvererbung

User Item

LoggableObjectlog()

$this->log() $this->log()

ProfilableObjectprofile()

TRAITSVariante 1: Mehrfachvererbung

User Item

LoggableObjectlog()

$this->log() $this->log()

ProfilableObjectprofile()

TRAITSVariante 2: Traits

User Item

LoggerTraitlog()

$this->log() $this->log()

ProfilingTraitprofile()

use

use

use

use

TRAITStrait Logger { public function log(event, identifier, timestamp) {...}}

trait Profiler { public function profile() {...}}

class User { use Logger, Profiler; public function login() { $this->log(‘login’, $user->name, time()); $this->profile(...); }}

Class Item { use Logger, Profiler; public function ship() { $this->log(‘login’, $item->id, time()); $this->profile(...); }}

Danke. Fragen?

@ManuelKiessling

top related