php 5.4: die wichtigsten neuerungen im Überblick

17
PHP 5.4 Die wichtigsten Neuerungen im Überblick @ManuelKiessling

Upload: manuel-kiessling

Post on 06-Dec-2014

3.224 views

Category:

Technology


2 download

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

Page 1: PHP 5.4: Die wichtigsten Neuerungen im Überblick

PHP 5.4Die wichtigsten Neuerungen im Überblick

@ManuelKiessling

Page 2: PHP 5.4: Die wichtigsten Neuerungen im Überblick

SHORT ARRAY SYNTAX

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

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

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

Page 3: PHP 5.4: Die wichtigsten Neuerungen im Überblick

FUNCTION ARRAY DEREFERENCING

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

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

Page 4: PHP 5.4: Die wichtigsten Neuerungen im Überblick

CLASS MEMBER ACCESS ON INSTANTIATION

class Foo {public function bar() {

echo ‘foobar’; }}

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

Page 5: PHP 5.4: Die wichtigsten Neuerungen im Überblick

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.”

Page 6: PHP 5.4: Die wichtigsten Neuerungen im Überblick

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.

Page 7: PHP 5.4: Die wichtigsten Neuerungen im Überblick

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());}

}

Page 8: PHP 5.4: Die wichtigsten Neuerungen im Überblick

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.

Page 9: PHP 5.4: Die wichtigsten Neuerungen im Überblick

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?

Page 10: PHP 5.4: Die wichtigsten Neuerungen im Überblick

TRAITSVariante 1: Gemeinsame Vererbung

User Item

LoggableObjectlog()

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

Page 11: PHP 5.4: Die wichtigsten Neuerungen im Überblick

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()); }}

Page 12: PHP 5.4: Die wichtigsten Neuerungen im Überblick

TRAITS

Was, wenn wir einen zweiten Aspekt haben?

User Item

Verhalten: login()order()

buy()ship()

pay()changeColor()

Aspekt: logginglogging

profilingprofiling

Page 13: PHP 5.4: Die wichtigsten Neuerungen im Überblick

TRAITSVariante 1: Mehrfachvererbung

User Item

LoggableObjectlog()

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

ProfilableObjectprofile()

Page 14: PHP 5.4: Die wichtigsten Neuerungen im Überblick

TRAITSVariante 1: Mehrfachvererbung

User Item

LoggableObjectlog()

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

ProfilableObjectprofile()

Page 15: PHP 5.4: Die wichtigsten Neuerungen im Überblick

TRAITSVariante 2: Traits

User Item

LoggerTraitlog()

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

ProfilingTraitprofile()

use

use

use

use

Page 16: PHP 5.4: Die wichtigsten Neuerungen im Überblick

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(...); }}

Page 17: PHP 5.4: Die wichtigsten Neuerungen im Überblick

Danke. Fragen?

@ManuelKiessling