SlideShare une entreprise Scribd logo
Return type
declaration
Webinar 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 futur
Class 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 %s
Fatal error: Destructor %s::__destruct() cannot declare a return type in %s on line
%s
Fatal 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

Contenu connexe

Tendances

Boosted Java to Native Interface (JNI)
Boosted Java to Native Interface (JNI)Boosted Java to Native Interface (JNI)
Boosted Java to Native Interface (JNI)
Innobec
 
C++11 en 12 exemples simples
C++11 en 12 exemples simplesC++11 en 12 exemples simples
C++11 en 12 exemples simples
Pethrvs
 
Partie 4: Fonctions - Programmation orientée objet en C++
Partie 4: Fonctions - Programmation orientée objet en C++Partie 4: Fonctions - Programmation orientée objet en C++
Partie 4: Fonctions - Programmation orientée objet en C++
Fabio Hernandez
 
Partie 14: Entrée/Sortie — Programmation orientée objet en C++
Partie 14: Entrée/Sortie — Programmation orientée objet en C++Partie 14: Entrée/Sortie — Programmation orientée objet en C++
Partie 14: Entrée/Sortie — Programmation orientée objet en C++
Fabio Hernandez
 
[FR] Injection de dépendances, Containers & PHP-DI
[FR] Injection de dépendances, Containers & PHP-DI[FR] Injection de dépendances, Containers & PHP-DI
[FR] Injection de dépendances, Containers & PHP-DI
matthieunapoli
 
Partie 10: Classes Génériques — Programmation orientée objet en C++
Partie 10: Classes Génériques — Programmation orientée objet en C++Partie 10: Classes Génériques — Programmation orientée objet en C++
Partie 10: Classes Génériques — Programmation orientée objet en C++
Fabio Hernandez
 
Introduction à Python - Achraf Kacimi El Hassani
Introduction à Python - Achraf Kacimi El HassaniIntroduction à Python - Achraf Kacimi El Hassani
Introduction à Python - Achraf Kacimi El Hassani
Shellmates
 
Un compilateur... comment ça marche?
Un compilateur... comment ça marche?Un compilateur... comment ça marche?
Un compilateur... comment ça marche?
Dinesh Bolkensteyn
 
Formation python
Formation pythonFormation python
Formation python
Thierry Gayet
 
Formation C# - Cours 2 - Programmation procédurale
Formation C# - Cours 2 - Programmation procéduraleFormation C# - Cours 2 - Programmation procédurale
Formation C# - Cours 2 - Programmation procédurale
kemenaran
 
Cours structures des données (langage c)
Cours structures des données (langage c)Cours structures des données (langage c)
Cours structures des données (langage c)
rezgui mohamed
 
Partie 1: Notions de base — Programmation orientée objet en C++
Partie 1: Notions de base — Programmation orientée objet en C++Partie 1: Notions de base — Programmation orientée objet en C++
Partie 1: Notions de base — Programmation orientée objet en C++
Fabio Hernandez
 
Python avancé : Ensemble, dictionnaire et base de données
Python avancé : Ensemble, dictionnaire et base de donnéesPython avancé : Ensemble, dictionnaire et base de données
Python avancé : Ensemble, dictionnaire et base de données
ECAM Brussels Engineering School
 
Open close principle, on a dit étendre, pas extends !
Open close principle, on a dit étendre, pas extends !Open close principle, on a dit étendre, pas extends !
Open close principle, on a dit étendre, pas extends !
Engineor
 
Per lameliorer
Per lameliorerPer lameliorer
Per lameliorer
TECOS
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScript
Abdoulaye Dieng
 
Les nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ ModerneLes nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ Moderne
Microsoft
 
Python avancé : Lecture et écriture de fichiers
Python avancé : Lecture et écriture de fichiersPython avancé : Lecture et écriture de fichiers
Python avancé : Lecture et écriture de fichiers
ECAM Brussels Engineering School
 

Tendances (19)

Boosted Java to Native Interface (JNI)
Boosted Java to Native Interface (JNI)Boosted Java to Native Interface (JNI)
Boosted Java to Native Interface (JNI)
 
C++11 en 12 exemples simples
C++11 en 12 exemples simplesC++11 en 12 exemples simples
C++11 en 12 exemples simples
 
Partie 4: Fonctions - Programmation orientée objet en C++
Partie 4: Fonctions - Programmation orientée objet en C++Partie 4: Fonctions - Programmation orientée objet en C++
Partie 4: Fonctions - Programmation orientée objet en C++
 
Partie 14: Entrée/Sortie — Programmation orientée objet en C++
Partie 14: Entrée/Sortie — Programmation orientée objet en C++Partie 14: Entrée/Sortie — Programmation orientée objet en C++
Partie 14: Entrée/Sortie — Programmation orientée objet en C++
 
[FR] Injection de dépendances, Containers & PHP-DI
[FR] Injection de dépendances, Containers & PHP-DI[FR] Injection de dépendances, Containers & PHP-DI
[FR] Injection de dépendances, Containers & PHP-DI
 
Partie 10: Classes Génériques — Programmation orientée objet en C++
Partie 10: Classes Génériques — Programmation orientée objet en C++Partie 10: Classes Génériques — Programmation orientée objet en C++
Partie 10: Classes Génériques — Programmation orientée objet en C++
 
Introduction à Python - Achraf Kacimi El Hassani
Introduction à Python - Achraf Kacimi El HassaniIntroduction à Python - Achraf Kacimi El Hassani
Introduction à Python - Achraf Kacimi El Hassani
 
Un compilateur... comment ça marche?
Un compilateur... comment ça marche?Un compilateur... comment ça marche?
Un compilateur... comment ça marche?
 
Tp appel procedure
Tp appel procedureTp appel procedure
Tp appel procedure
 
Formation python
Formation pythonFormation python
Formation python
 
Formation C# - Cours 2 - Programmation procédurale
Formation C# - Cours 2 - Programmation procéduraleFormation C# - Cours 2 - Programmation procédurale
Formation C# - Cours 2 - Programmation procédurale
 
Cours structures des données (langage c)
Cours structures des données (langage c)Cours structures des données (langage c)
Cours structures des données (langage c)
 
Partie 1: Notions de base — Programmation orientée objet en C++
Partie 1: Notions de base — Programmation orientée objet en C++Partie 1: Notions de base — Programmation orientée objet en C++
Partie 1: Notions de base — Programmation orientée objet en C++
 
Python avancé : Ensemble, dictionnaire et base de données
Python avancé : Ensemble, dictionnaire et base de donnéesPython avancé : Ensemble, dictionnaire et base de données
Python avancé : Ensemble, dictionnaire et base de données
 
Open close principle, on a dit étendre, pas extends !
Open close principle, on a dit étendre, pas extends !Open close principle, on a dit étendre, pas extends !
Open close principle, on a dit étendre, pas extends !
 
Per lameliorer
Per lameliorerPer lameliorer
Per lameliorer
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScript
 
Les nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ ModerneLes nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ Moderne
 
Python avancé : Lecture et écriture de fichiers
Python avancé : Lecture et écriture de fichiersPython avancé : Lecture et écriture de fichiers
Python avancé : Lecture et écriture de fichiers
 

Similaire à Return Type Declaration

Patterns and OOP in PHP
Patterns and OOP in PHPPatterns and OOP in PHP
Patterns and OOP in PHPjulien pauli
 
PHP 7 et Symfony 3
PHP 7 et Symfony 3PHP 7 et Symfony 3
PHP 7 et Symfony 3
Eddy RICHARD
 
Migration PHP4-PHP5
Migration PHP4-PHP5Migration PHP4-PHP5
Migration PHP4-PHP5
julien pauli
 
Php 7.4 2020-01-28 - afup
Php 7.4   2020-01-28 - afupPhp 7.4   2020-01-28 - afup
Php 7.4 2020-01-28 - afup
Julien Vinber
 
Nouveautés php 7
Nouveautés php 7Nouveautés php 7
Nouveautés php 7
Cyrille Grandval
 
VIM puissance PHP = VI Improved !
VIM puissance PHP = VI Improved !VIM puissance PHP = VI Improved !
VIM puissance PHP = VI Improved !
Frederic Hardy
 
Etes vous-pret pour php8 ?
Etes vous-pret pour php8 ?Etes vous-pret pour php8 ?
Etes vous-pret pour php8 ?
Christophe Villeneuve
 
Chapitre2fonctionscppv2019
Chapitre2fonctionscppv2019Chapitre2fonctionscppv2019
Chapitre2fonctionscppv2019
Aziz Darouichi
 
Chap2fonctionscpp
Chap2fonctionscppChap2fonctionscpp
Chap2fonctionscpp
Aziz Darouichi
 
Javascript ne se limite pas à jquery
Javascript ne se limite pas à jqueryJavascript ne se limite pas à jquery
Javascript ne se limite pas à jquery
neuros
 
02 Spécificité du C++ COURS SYS SYSSSSSS
02 Spécificité du C++  COURS SYS SYSSSSSS02 Spécificité du C++  COURS SYS SYSSSSSS
02 Spécificité du C++ COURS SYS SYSSSSSS
AyoubElmrabet6
 
Bases de php - Partie 3
Bases de php - Partie 3Bases de php - Partie 3
Bases de php - Partie 3
Régis Lutter
 
Php4 Mysql
Php4 MysqlPhp4 Mysql
Php4 Mysql
HamdiBaklouti
 
Cours php
Cours phpCours php
Cours php
csskaled
 
ch6 les sous programmes.pdf
ch6 les sous programmes.pdfch6 les sous programmes.pdf
ch6 les sous programmes.pdf
FadouaBouafifSamoud
 
POO-chapitre2.pptx
POO-chapitre2.pptxPOO-chapitre2.pptx
POO-chapitre2.pptx
ImaneLoukili7
 
seance4-1 php.ppt
seance4-1 php.pptseance4-1 php.ppt
seance4-1 php.ppt
AmineReal
 
Programmation web cours php -- sahmi academy
Programmation web   cours php -- sahmi academyProgrammation web   cours php -- sahmi academy
Programmation web cours php -- sahmi academy
Soufiane SAHMI
 

Similaire à Return Type Declaration (20)

Patterns and OOP in PHP
Patterns and OOP in PHPPatterns and OOP in PHP
Patterns and OOP in PHP
 
PHP 7 et Symfony 3
PHP 7 et Symfony 3PHP 7 et Symfony 3
PHP 7 et Symfony 3
 
Migration PHP4-PHP5
Migration PHP4-PHP5Migration PHP4-PHP5
Migration PHP4-PHP5
 
Php 7.4 2020-01-28 - afup
Php 7.4   2020-01-28 - afupPhp 7.4   2020-01-28 - afup
Php 7.4 2020-01-28 - afup
 
Nouveautés php 7
Nouveautés php 7Nouveautés php 7
Nouveautés php 7
 
VIM puissance PHP = VI Improved !
VIM puissance PHP = VI Improved !VIM puissance PHP = VI Improved !
VIM puissance PHP = VI Improved !
 
Etes vous-pret pour php8 ?
Etes vous-pret pour php8 ?Etes vous-pret pour php8 ?
Etes vous-pret pour php8 ?
 
Chapitre2fonctionscppv2019
Chapitre2fonctionscppv2019Chapitre2fonctionscppv2019
Chapitre2fonctionscppv2019
 
Chap2fonctionscpp
Chap2fonctionscppChap2fonctionscpp
Chap2fonctionscpp
 
Javascript ne se limite pas à jquery
Javascript ne se limite pas à jqueryJavascript ne se limite pas à jquery
Javascript ne se limite pas à jquery
 
02 Spécificité du C++ COURS SYS SYSSSSSS
02 Spécificité du C++  COURS SYS SYSSSSSS02 Spécificité du C++  COURS SYS SYSSSSSS
02 Spécificité du C++ COURS SYS SYSSSSSS
 
Bases de php - Partie 3
Bases de php - Partie 3Bases de php - Partie 3
Bases de php - Partie 3
 
Playing With PHP 5.3
Playing With PHP 5.3Playing With PHP 5.3
Playing With PHP 5.3
 
Php4 Mysql
Php4 MysqlPhp4 Mysql
Php4 Mysql
 
Cours php
Cours phpCours php
Cours php
 
ch6 les sous programmes.pdf
ch6 les sous programmes.pdfch6 les sous programmes.pdf
ch6 les sous programmes.pdf
 
POO-chapitre2.pptx
POO-chapitre2.pptxPOO-chapitre2.pptx
POO-chapitre2.pptx
 
Ch07
Ch07Ch07
Ch07
 
seance4-1 php.ppt
seance4-1 php.pptseance4-1 php.ppt
seance4-1 php.ppt
 
Programmation web cours php -- sahmi academy
Programmation web   cours php -- sahmi academyProgrammation web   cours php -- sahmi academy
Programmation web cours php -- sahmi academy
 

Plus de Darkmira

Null Coalescing Operator
Null Coalescing OperatorNull Coalescing Operator
Null Coalescing Operator
Darkmira
 
Uniform Variable Syntax
Uniform Variable SyntaxUniform Variable Syntax
Uniform Variable Syntax
Darkmira
 
Scalar Types Hints
Scalar Types HintsScalar Types Hints
Scalar Types Hints
Darkmira
 
Le spaceship operator
Le spaceship operatorLe spaceship operator
Le spaceship operator
Darkmira
 
Anonymous classes
Anonymous classesAnonymous classes
Anonymous classes
Darkmira
 
BC Breaks - Incompatibilites PHP7
BC Breaks - Incompatibilites PHP7BC Breaks - Incompatibilites PHP7
BC Breaks - Incompatibilites PHP7
Darkmira
 
Benchmark php7
Benchmark php7Benchmark php7
Benchmark php7
Darkmira
 
Webinar PHParty7 - Errors handlings
Webinar PHParty7 - Errors handlingsWebinar PHParty7 - Errors handlings
Webinar PHParty7 - Errors handlings
Darkmira
 

Plus de Darkmira (8)

Null Coalescing Operator
Null Coalescing OperatorNull Coalescing Operator
Null Coalescing Operator
 
Uniform Variable Syntax
Uniform Variable SyntaxUniform Variable Syntax
Uniform Variable Syntax
 
Scalar Types Hints
Scalar Types HintsScalar Types Hints
Scalar Types Hints
 
Le spaceship operator
Le spaceship operatorLe spaceship operator
Le spaceship operator
 
Anonymous classes
Anonymous classesAnonymous classes
Anonymous classes
 
BC Breaks - Incompatibilites PHP7
BC Breaks - Incompatibilites PHP7BC Breaks - Incompatibilites PHP7
BC Breaks - Incompatibilites PHP7
 
Benchmark php7
Benchmark php7Benchmark php7
Benchmark php7
 
Webinar PHParty7 - Errors handlings
Webinar PHParty7 - Errors handlingsWebinar PHParty7 - Errors handlings
Webinar PHParty7 - Errors handlings
 

Return Type Declaration

  • 2. 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 []; }
  • 3. 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
  • 4. 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 futur Class MyClass { function make() : MyClass { return new MyClass(); } Class MyOtherClass extends MyClass { function make() : MyClass { return new MyOtherClass(); } }
  • 5. Redéclarer des fonctions Fatal error: Constructor %s::%s() cannot declare a return type in %s on line %s Fatal error: Destructor %s::__destruct() cannot declare a return type in %s on line %s Fatal 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
  • 6. Simplicité et rigueur • Simplifie les tests : tester le type retourné est dispensable •Améliore la rigueur et la solidité du code
  • 7. 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