return type declaration
TRANSCRIPT
![Page 1: Return Type Declaration](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a5d2381a28ab6c2a8b65f3/html5/thumbnails/1.jpg)
Return type declarationWebinar PHParty7 France - 28/11/15
![Page 2: Return Type Declaration](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a5d2381a28ab6c2a8b65f3/html5/thumbnails/2.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a5d2381a28ab6c2a8b65f3/html5/thumbnails/3.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a5d2381a28ab6c2a8b65f3/html5/thumbnails/4.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a5d2381a28ab6c2a8b65f3/html5/thumbnails/5.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a5d2381a28ab6c2a8b65f3/html5/thumbnails/6.jpg)
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](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a5d2381a28ab6c2a8b65f3/html5/thumbnails/7.jpg)
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