return type declaration
TRANSCRIPT
Return type declarationWebinar PHParty7 France - 28/11/15
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 []; }
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
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(); }}
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
Simplicité et rigueur
• Simplifie les tests : tester le type retourné est dispensable
•Améliore la rigueur et la solidité du code
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