return type declaration

7
Return type declaration Webinar PHParty7 France - 28/11/15

Upload: darkmira

Post on 12-Apr-2017

180 views

Category:

Internet


0 download

TRANSCRIPT

Page 1: Return Type Declaration

Return type declarationWebinar PHParty7 France - 28/11/15

Page 2: Return Type Declaration

Connaître le type retourné

/* * Retourne un array * @return array */function foo() { return []; }

• Avant php7 : phpdoc(informatif : pas d’incidence sur le code )

• php7 : phpdoc / déclaration (pris en compte par le parser)

/* * Retourne un array * @return array */function foo() : array { return []; }

Page 3: Return Type Declaration

function foo() : integer { return 1337;}

function foo() : string { return ‘hello php7 ! ’;}

function &array_sort(array &$data) : array{ return $data; }

function foo() : integer{ return”toto”;//ERROR}

//Catchable fatal error: Return value of answer() must be an instance of int, string returned in %s on line %d

function foo() : DateTime { return null; // invalid}

Une déclaration claire

Page 4: Return Type Declaration

Attention aux types

interface A { static function make(): A; }

class B implements A { static function make(): A { return new B(); }}

interface A { static function make(): A; }

class B implements A { static function make(): B { // must exactly match parent; this will error return new B(); } }

//Sera peut-être autorisé dans le futurClass MyClass {function make() : MyClass{ return new MyClass();}Class MyOtherClass extends MyClass { function make() : MyClass { return new MyOtherClass(); }}

Page 5: Return Type Declaration

Redéclarer des fonctions

Fatal error: Constructor %s::%s() cannot declare a return type in %s on line %sFatal error: Destructor %s::__destruct() cannot declare a return type in %s on line %sFatal error: %s::__clone() cannot declare a return type in %s on line %s

Class MyClass{ public function foo() : array { return []; }}

Class MyOtherClass extends MyClass{ public function foo() : MyClass { return new MyClass(); }}

• L’héritage doit respecter la signature

Page 6: Return Type Declaration

Simplicité et rigueur

• Simplifie les tests : tester le type retourné est dispensable

•Améliore la rigueur et la solidité du code

Page 7: Return Type Declaration

Dans le futur

• Déclaration de fonction sans retour (procédure, void en java et C)• Type null sera autorisé• Variabilité du type retourné• Performences