SlideShare une entreprise Scribd logo
Migrer de PHP4 à PHP5 Analyse de code et revue des principaux changements
Qui parle ? Julien PAULI
Formateur - consultant Anaska Alter-Way Stand F30 Spécialiste PHP et ZendFramework
Membre AFUP
Auteur Zend Framework, bien développer en PHP Contributeur Zend Framework
PHP
Apache
Evolution de PHP PHP4 est abandonné depuis le 08/08/08
PHP5 = PHP5.2.9 aujourd'hui, c'est important !
PHP5 est en évolution permanente
Demain PHP5.3 arrive, après demain PHP6
Voyons les grandes lignes techniques d'une migration
Plan PHP5 : un vrai modèle objet
Traitements XML améliorés
Utilisation de bases de données MySQL Changements dans les fonctions
Conclusion
Le modèle objet de PHP5 En PHP4, les objets ne sont que des tableaux masqués Le ZendEngine les traite comme tels
On utilise " -> " plutot que " [ " et " ] "
C'est tout ... En PHP5, les objets sont un vrai type Codés comme un type dans ZendEngine2
Permet beaucoup plus de chose que simplement utiliser " -> "
Modèle objet de PHP5 : références Tous les objets agissent comme des références en PHP5 Ce ne sont pas des "références" PHP
Mais leur comportement est identique class Foo { public function maFonction($arg1) { } } $a = new Foo; class Foo { function maFonction($arg1) { } } $a = &new Foo;
Modèle objet de PHP5 : références Passage par référence PHP5 class Foo { public $attribut = 'hello'; public function maFonction($arg1) { } } $a = new Foo; $b = $a; $a->attribut = 'changé'; echo $b->attribut // 'changé' class Foo { var $attribut = 'hello'; function maFonction($arg1) { } } $a = &new Foo; $b = &$a; $a->attribut = 'changé'; echo $b->attribut // 'changé'
Modèle objet de PHP5 : clonage Passage par référence PHP5 Clonage pour copier un objet $a = new Foo; $b =  clone  $a; $c = $a; $a->attribut = 'solutionslinux'; echo $b->attribut; // attribut echo $c->attribut; // solutionslinux $a = &new Foo; $b = $a; $c = &$a; $a->attribut = 'solutionslinux'; echo $b->attribut; // attribut echo $c->attribut; // solutionslinux
Modèle objet de PHP5 : visibilités Visibilités compatibles Grande compatibilité pour faciliter les migrations
PHP5 introduit "public", "protected", "private" class Foo { var $a; // ok, pas de problème, sera publique function bar(); // idem : sera publique } class Foo { var $a; function bar(); }
Modèle objet de PHP5 : casse Casse des méthodes, fonctions et classes En PHP, les classes et méthodes sont insensibles à la casse La casse est respectée en PHP5, elle ne l'était pas en PHP4 class Foo { function HeLLo() { } } class bAr extends Foo {} $a = new bar; echo get_class($a);  // bAr print_r(get_class_methods($a)); // array ("HeLLo"); echo get_parent_class($a);  //Foo class Foo { function HeLLo() { } } class bAr extends Foo {} $a = &new bar; echo get_class($a);  // bar print_r(get_class_methods($a)); // array("hello"); echo get_parent_class($a);  // foo
Mode de compatibilité modèle objet PHP5 Mode de compatibilité PHP4 PHP.ini : zend.ze1_compatibility_mode
Mis à zéro par défaut (comportement PHP5) Mettre cette directive à 1 permet d'utiliser le comportement objet de PHP4 dans PHP5 Utile pour migrer, mais rapidement

Contenu connexe

Tendances

Cours php
Cours phpCours php
Cours php
csskaled
 
PHP 7 et Symfony 3
PHP 7 et Symfony 3PHP 7 et Symfony 3
PHP 7 et Symfony 3
Eddy RICHARD
 
PHP 5.3, PHP Next
PHP 5.3, PHP NextPHP 5.3, PHP Next
PHP 5.3, PHP Next
SQLI
 
Communications Réseaux et HTTP avec PHP
Communications Réseaux et HTTP avec PHPCommunications Réseaux et HTTP avec PHP
Communications Réseaux et HTTP avec PHP
julien pauli
 
PHP Training
PHP TrainingPHP Training
PHP Training
ahmed oumezzine
 
PHP #1 : introduction
PHP #1 : introductionPHP #1 : introduction
PHP #1 : introduction
Jean Michel
 
PHPTour 2011 - PHP5.4
PHPTour 2011 - PHP5.4PHPTour 2011 - PHP5.4
PHPTour 2011 - PHP5.4
julien pauli
 
Etes vous-pret pour php8 ?
Etes vous-pret pour php8 ?Etes vous-pret pour php8 ?
Etes vous-pret pour php8 ?
Christophe Villeneuve
 
Bases de PHP - Partie 1
Bases de PHP - Partie 1Bases de PHP - Partie 1
Bases de PHP - Partie 1
Régis Lutter
 
Php cours
Php coursPhp cours
Php cours
funinformatique
 
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
 
ZendFramework2 - Présentation
ZendFramework2 - PrésentationZendFramework2 - Présentation
ZendFramework2 - Présentation
julien pauli
 
Langage Perl
Langage PerlLangage Perl
Langage Perl
Rached Krim
 
PHP (Partie I) Par Mahdi Ben Alaya
PHP (Partie I) Par Mahdi Ben AlayaPHP (Partie I) Par Mahdi Ben Alaya
PHP (Partie I) Par Mahdi Ben Alaya
Mahdi Ben Alaya
 
PHP (Partie II) Par Mahdi Ben Alaya
PHP (Partie II) Par Mahdi Ben AlayaPHP (Partie II) Par Mahdi Ben Alaya
PHP (Partie II) Par Mahdi Ben Alaya
Mahdi Ben Alaya
 
Initiation au langage PHP
Initiation au langage PHPInitiation au langage PHP
Initiation au langage PHP
Faouzia Benabbou
 
Alfresco en quelques points - Recherche Tutorial
Alfresco en quelques points - Recherche TutorialAlfresco en quelques points - Recherche Tutorial
Alfresco en quelques points - Recherche Tutorial
PASCAL Jean Marie
 
Per lameliorer
Per lameliorerPer lameliorer
Per lameliorer
TECOS
 

Tendances (18)

Cours php
Cours phpCours php
Cours php
 
PHP 7 et Symfony 3
PHP 7 et Symfony 3PHP 7 et Symfony 3
PHP 7 et Symfony 3
 
PHP 5.3, PHP Next
PHP 5.3, PHP NextPHP 5.3, PHP Next
PHP 5.3, PHP Next
 
Communications Réseaux et HTTP avec PHP
Communications Réseaux et HTTP avec PHPCommunications Réseaux et HTTP avec PHP
Communications Réseaux et HTTP avec PHP
 
PHP Training
PHP TrainingPHP Training
PHP Training
 
PHP #1 : introduction
PHP #1 : introductionPHP #1 : introduction
PHP #1 : introduction
 
PHPTour 2011 - PHP5.4
PHPTour 2011 - PHP5.4PHPTour 2011 - PHP5.4
PHPTour 2011 - PHP5.4
 
Etes vous-pret pour php8 ?
Etes vous-pret pour php8 ?Etes vous-pret pour php8 ?
Etes vous-pret pour php8 ?
 
Bases de PHP - Partie 1
Bases de PHP - Partie 1Bases de PHP - Partie 1
Bases de PHP - Partie 1
 
Php cours
Php coursPhp cours
Php cours
 
Programmation web cours php -- sahmi academy
Programmation web   cours php -- sahmi academyProgrammation web   cours php -- sahmi academy
Programmation web cours php -- sahmi academy
 
ZendFramework2 - Présentation
ZendFramework2 - PrésentationZendFramework2 - Présentation
ZendFramework2 - Présentation
 
Langage Perl
Langage PerlLangage Perl
Langage Perl
 
PHP (Partie I) Par Mahdi Ben Alaya
PHP (Partie I) Par Mahdi Ben AlayaPHP (Partie I) Par Mahdi Ben Alaya
PHP (Partie I) Par Mahdi Ben Alaya
 
PHP (Partie II) Par Mahdi Ben Alaya
PHP (Partie II) Par Mahdi Ben AlayaPHP (Partie II) Par Mahdi Ben Alaya
PHP (Partie II) Par Mahdi Ben Alaya
 
Initiation au langage PHP
Initiation au langage PHPInitiation au langage PHP
Initiation au langage PHP
 
Alfresco en quelques points - Recherche Tutorial
Alfresco en quelques points - Recherche TutorialAlfresco en quelques points - Recherche Tutorial
Alfresco en quelques points - Recherche Tutorial
 
Per lameliorer
Per lameliorerPer lameliorer
Per lameliorer
 

En vedette

English result pre-intermediate_wb
English result pre-intermediate_wbEnglish result pre-intermediate_wb
English result pre-intermediate_wb
Sico Olivera
 
English result pre int sb
English result pre int sbEnglish result pre int sb
English result pre int sb
Luna61 Luna
 
Business result elementary sb
Business result elementary sbBusiness result elementary sb
Business result elementary sb
Ednilson Faria
 
English Result Intermediate Student´s Book pdf file
English Result Intermediate Student´s Book pdf fileEnglish Result Intermediate Student´s Book pdf file
English Result Intermediate Student´s Book pdf file
M. Mabel Otero
 
The business - intermediate Book!!!
The business - intermediate Book!!!The business - intermediate Book!!!
The business - intermediate Book!!!
Jenlytine
 
Migration
MigrationMigration
Migration
Deighton Gooden
 
Migration
MigrationMigration
Migration
Steven Heath
 
présentation migration automatisee Pacbase -> UML + Java
présentation migration automatisee Pacbase -> UML + Javaprésentation migration automatisee Pacbase -> UML + Java
présentation migration automatisee Pacbase -> UML + Java
Didier Durand
 
Tests de performances d'une application Java EE
Tests de performances d'une application Java EETests de performances d'une application Java EE
Tests de performances d'une application Java EE
Antonio Gomes Rodrigues
 
PFE BI - INPT
PFE BI - INPTPFE BI - INPT
PFE BI - INPT
riyadadva
 
English result elementary tb
English result elementary tbEnglish result elementary tb
English result elementary tb
Sameh Khanfir
 
Business basics student's book
Business basics student's bookBusiness basics student's book
Business basics student's book
pepitagimenez7
 

En vedette (13)

Migration VB6 > .Net
Migration VB6 > .NetMigration VB6 > .Net
Migration VB6 > .Net
 
English result pre-intermediate_wb
English result pre-intermediate_wbEnglish result pre-intermediate_wb
English result pre-intermediate_wb
 
English result pre int sb
English result pre int sbEnglish result pre int sb
English result pre int sb
 
Business result elementary sb
Business result elementary sbBusiness result elementary sb
Business result elementary sb
 
English Result Intermediate Student´s Book pdf file
English Result Intermediate Student´s Book pdf fileEnglish Result Intermediate Student´s Book pdf file
English Result Intermediate Student´s Book pdf file
 
The business - intermediate Book!!!
The business - intermediate Book!!!The business - intermediate Book!!!
The business - intermediate Book!!!
 
Migration
MigrationMigration
Migration
 
Migration
MigrationMigration
Migration
 
présentation migration automatisee Pacbase -> UML + Java
présentation migration automatisee Pacbase -> UML + Javaprésentation migration automatisee Pacbase -> UML + Java
présentation migration automatisee Pacbase -> UML + Java
 
Tests de performances d'une application Java EE
Tests de performances d'une application Java EETests de performances d'une application Java EE
Tests de performances d'une application Java EE
 
PFE BI - INPT
PFE BI - INPTPFE BI - INPT
PFE BI - INPT
 
English result elementary tb
English result elementary tbEnglish result elementary tb
English result elementary tb
 
Business basics student's book
Business basics student's bookBusiness basics student's book
Business basics student's book
 

Similaire à Migration PHP4-PHP5

Patterns and OOP in PHP
Patterns and OOP in PHPPatterns and OOP in PHP
Patterns and OOP in PHP
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
 
Tout pour se préparer à PHP 7.4
Tout pour se préparer à PHP 7.4Tout pour se préparer à PHP 7.4
Tout pour se préparer à PHP 7.4
Damien Seguy
 
Cours3-PHPfgdwfwdffhddfbwdfwdfwdfwdfwfw.pdf
Cours3-PHPfgdwfwdffhddfbwdfwdfwdfwdfwfw.pdfCours3-PHPfgdwfwdffhddfbwdfwdfwdfwdfwfw.pdf
Cours3-PHPfgdwfwdffhddfbwdfwdfwdfwdfwfw.pdf
RihabBENLAMINE
 
Php trollons mais trollons bien (Bdx.io 2015)
Php trollons mais trollons bien (Bdx.io 2015)Php trollons mais trollons bien (Bdx.io 2015)
Php trollons mais trollons bien (Bdx.io 2015)
Arnaud Langlade
 
Spring 3.0
Spring 3.0Spring 3.0
PHP mysql Xml.doc
PHP mysql Xml.docPHP mysql Xml.doc
PHP mysql Xml.doc
GroupeExcelMarrakech
 
Les principes de base de PHP
 Les principes de base de PHP  Les principes de base de PHP
Les principes de base de PHP
EL JAOUARI Ahmed
 
PHP mysql Xml.pdf
PHP mysql Xml.pdfPHP mysql Xml.pdf
PHP mysql Xml.pdf
GroupeExcelMarrakech
 
Introduction à PHP
Introduction à PHPIntroduction à PHP
Introduction à PHP
Saïd Radhouani
 
Php 7 Think php7
Php 7 Think php7Php 7 Think php7
Php 7 Think php7
neuros
 
PHP 5.3 : les nouveautés du futur si proche
PHP 5.3 : les nouveautés du futur si prochePHP 5.3 : les nouveautés du futur si proche
PHP 5.3 : les nouveautés du futur si proche
Pascal MARTIN
 
Php_Mysql.pdf
Php_Mysql.pdfPhp_Mysql.pdf
Php_Mysql.pdf
ETTAMRY
 
chapitre 4-PHP5 module web part2 (1).pdf
chapitre 4-PHP5 module web part2 (1).pdfchapitre 4-PHP5 module web part2 (1).pdf
chapitre 4-PHP5 module web part2 (1).pdf
imaneeaouattahee
 
Php 5.3
Php 5.3Php 5.3
Php 5.3
epixelic
 

Similaire à Migration PHP4-PHP5 (20)

Patterns and OOP in PHP
Patterns and OOP in PHPPatterns and OOP in PHP
Patterns and OOP in PHP
 
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
 
Playing With PHP 5.3
Playing With PHP 5.3Playing With PHP 5.3
Playing With PHP 5.3
 
Tout pour se préparer à PHP 7.4
Tout pour se préparer à PHP 7.4Tout pour se préparer à PHP 7.4
Tout pour se préparer à PHP 7.4
 
Cours3-PHPfgdwfwdffhddfbwdfwdfwdfwdfwfw.pdf
Cours3-PHPfgdwfwdffhddfbwdfwdfwdfwdfwfw.pdfCours3-PHPfgdwfwdffhddfbwdfwdfwdfwdfwfw.pdf
Cours3-PHPfgdwfwdffhddfbwdfwdfwdfwdfwfw.pdf
 
Php trollons mais trollons bien (Bdx.io 2015)
Php trollons mais trollons bien (Bdx.io 2015)Php trollons mais trollons bien (Bdx.io 2015)
Php trollons mais trollons bien (Bdx.io 2015)
 
Spring 3.0
Spring 3.0Spring 3.0
Spring 3.0
 
Cours Php
Cours PhpCours Php
Cours Php
 
Cours Php
Cours PhpCours Php
Cours Php
 
PHP mysql Xml.doc
PHP mysql Xml.docPHP mysql Xml.doc
PHP mysql Xml.doc
 
Les principes de base de PHP
 Les principes de base de PHP  Les principes de base de PHP
Les principes de base de PHP
 
PHP mysql Xml.pdf
PHP mysql Xml.pdfPHP mysql Xml.pdf
PHP mysql Xml.pdf
 
PHP.pptx
PHP.pptxPHP.pptx
PHP.pptx
 
Introduction à PHP
Introduction à PHPIntroduction à PHP
Introduction à PHP
 
Php 7 Think php7
Php 7 Think php7Php 7 Think php7
Php 7 Think php7
 
PHP 5.3 : les nouveautés du futur si proche
PHP 5.3 : les nouveautés du futur si prochePHP 5.3 : les nouveautés du futur si proche
PHP 5.3 : les nouveautés du futur si proche
 
Php_Mysql.pdf
Php_Mysql.pdfPhp_Mysql.pdf
Php_Mysql.pdf
 
chapitre 4-PHP5 module web part2 (1).pdf
chapitre 4-PHP5 module web part2 (1).pdfchapitre 4-PHP5 module web part2 (1).pdf
chapitre 4-PHP5 module web part2 (1).pdf
 
Php seance1
Php seance1Php seance1
Php seance1
 
Php 5.3
Php 5.3Php 5.3
Php 5.3
 

Plus de julien pauli

Doctrine with Symfony - SymfonyCon 2019
Doctrine with Symfony - SymfonyCon 2019Doctrine with Symfony - SymfonyCon 2019
Doctrine with Symfony - SymfonyCon 2019
julien pauli
 
Php engine
Php enginePhp engine
Php engine
julien pauli
 
PHP 7 OPCache extension review
PHP 7 OPCache extension reviewPHP 7 OPCache extension review
PHP 7 OPCache extension review
julien pauli
 
Dns
DnsDns
PHP Internals and Virtual Machine
PHP Internals and Virtual MachinePHP Internals and Virtual Machine
PHP Internals and Virtual Machine
julien pauli
 
Basics of Cryptography - Stream ciphers and PRNG
Basics of Cryptography - Stream ciphers and PRNGBasics of Cryptography - Stream ciphers and PRNG
Basics of Cryptography - Stream ciphers and PRNG
julien pauli
 
Mastering your home network - Do It Yourself
Mastering your home network - Do It YourselfMastering your home network - Do It Yourself
Mastering your home network - Do It Yourself
julien pauli
 
SymfonyCon 2017 php7 performances
SymfonyCon 2017 php7 performancesSymfonyCon 2017 php7 performances
SymfonyCon 2017 php7 performances
julien pauli
 
Php and threads ZTS
Php and threads ZTSPhp and threads ZTS
Php and threads ZTS
julien pauli
 
Tcpip
TcpipTcpip
Symfony live 2017_php7_performances
Symfony live 2017_php7_performancesSymfony live 2017_php7_performances
Symfony live 2017_php7_performances
julien pauli
 
PHP 7 new engine
PHP 7 new enginePHP 7 new engine
PHP 7 new engine
julien pauli
 
Php7 extensions workshop
Php7 extensions workshopPhp7 extensions workshop
Php7 extensions workshop
julien pauli
 
Profiling php5 to php7
Profiling php5 to php7Profiling php5 to php7
Profiling php5 to php7
julien pauli
 
PHP 7 performances from PHP 5
PHP 7 performances from PHP 5PHP 7 performances from PHP 5
PHP 7 performances from PHP 5
julien pauli
 
PHP7 is coming
PHP7 is comingPHP7 is coming
PHP7 is coming
julien pauli
 
Mysqlnd, an unknown powerful PHP extension
Mysqlnd, an unknown powerful PHP extensionMysqlnd, an unknown powerful PHP extension
Mysqlnd, an unknown powerful PHP extension
julien pauli
 
Php extensions workshop
Php extensions workshopPhp extensions workshop
Php extensions workshop
julien pauli
 
Understanding PHP objects
Understanding PHP objectsUnderstanding PHP objects
Understanding PHP objects
julien pauli
 
PHP Tips for certification - OdW13
PHP Tips for certification - OdW13PHP Tips for certification - OdW13
PHP Tips for certification - OdW13
julien pauli
 

Plus de julien pauli (20)

Doctrine with Symfony - SymfonyCon 2019
Doctrine with Symfony - SymfonyCon 2019Doctrine with Symfony - SymfonyCon 2019
Doctrine with Symfony - SymfonyCon 2019
 
Php engine
Php enginePhp engine
Php engine
 
PHP 7 OPCache extension review
PHP 7 OPCache extension reviewPHP 7 OPCache extension review
PHP 7 OPCache extension review
 
Dns
DnsDns
Dns
 
PHP Internals and Virtual Machine
PHP Internals and Virtual MachinePHP Internals and Virtual Machine
PHP Internals and Virtual Machine
 
Basics of Cryptography - Stream ciphers and PRNG
Basics of Cryptography - Stream ciphers and PRNGBasics of Cryptography - Stream ciphers and PRNG
Basics of Cryptography - Stream ciphers and PRNG
 
Mastering your home network - Do It Yourself
Mastering your home network - Do It YourselfMastering your home network - Do It Yourself
Mastering your home network - Do It Yourself
 
SymfonyCon 2017 php7 performances
SymfonyCon 2017 php7 performancesSymfonyCon 2017 php7 performances
SymfonyCon 2017 php7 performances
 
Php and threads ZTS
Php and threads ZTSPhp and threads ZTS
Php and threads ZTS
 
Tcpip
TcpipTcpip
Tcpip
 
Symfony live 2017_php7_performances
Symfony live 2017_php7_performancesSymfony live 2017_php7_performances
Symfony live 2017_php7_performances
 
PHP 7 new engine
PHP 7 new enginePHP 7 new engine
PHP 7 new engine
 
Php7 extensions workshop
Php7 extensions workshopPhp7 extensions workshop
Php7 extensions workshop
 
Profiling php5 to php7
Profiling php5 to php7Profiling php5 to php7
Profiling php5 to php7
 
PHP 7 performances from PHP 5
PHP 7 performances from PHP 5PHP 7 performances from PHP 5
PHP 7 performances from PHP 5
 
PHP7 is coming
PHP7 is comingPHP7 is coming
PHP7 is coming
 
Mysqlnd, an unknown powerful PHP extension
Mysqlnd, an unknown powerful PHP extensionMysqlnd, an unknown powerful PHP extension
Mysqlnd, an unknown powerful PHP extension
 
Php extensions workshop
Php extensions workshopPhp extensions workshop
Php extensions workshop
 
Understanding PHP objects
Understanding PHP objectsUnderstanding PHP objects
Understanding PHP objects
 
PHP Tips for certification - OdW13
PHP Tips for certification - OdW13PHP Tips for certification - OdW13
PHP Tips for certification - OdW13
 

Migration PHP4-PHP5

  • 1. Migrer de PHP4 à PHP5 Analyse de code et revue des principaux changements
  • 2. Qui parle ? Julien PAULI
  • 3. Formateur - consultant Anaska Alter-Way Stand F30 Spécialiste PHP et ZendFramework
  • 5. Auteur Zend Framework, bien développer en PHP Contributeur Zend Framework
  • 6. PHP
  • 8. Evolution de PHP PHP4 est abandonné depuis le 08/08/08
  • 9. PHP5 = PHP5.2.9 aujourd'hui, c'est important !
  • 10. PHP5 est en évolution permanente
  • 11. Demain PHP5.3 arrive, après demain PHP6
  • 12. Voyons les grandes lignes techniques d'une migration
  • 13. Plan PHP5 : un vrai modèle objet
  • 15. Utilisation de bases de données MySQL Changements dans les fonctions
  • 17. Le modèle objet de PHP5 En PHP4, les objets ne sont que des tableaux masqués Le ZendEngine les traite comme tels
  • 18. On utilise " -> " plutot que " [ " et " ] "
  • 19. C'est tout ... En PHP5, les objets sont un vrai type Codés comme un type dans ZendEngine2
  • 20. Permet beaucoup plus de chose que simplement utiliser " -> "
  • 21. Modèle objet de PHP5 : références Tous les objets agissent comme des références en PHP5 Ce ne sont pas des "références" PHP
  • 22. Mais leur comportement est identique class Foo { public function maFonction($arg1) { } } $a = new Foo; class Foo { function maFonction($arg1) { } } $a = &new Foo;
  • 23. Modèle objet de PHP5 : références Passage par référence PHP5 class Foo { public $attribut = 'hello'; public function maFonction($arg1) { } } $a = new Foo; $b = $a; $a->attribut = 'changé'; echo $b->attribut // 'changé' class Foo { var $attribut = 'hello'; function maFonction($arg1) { } } $a = &new Foo; $b = &$a; $a->attribut = 'changé'; echo $b->attribut // 'changé'
  • 24. Modèle objet de PHP5 : clonage Passage par référence PHP5 Clonage pour copier un objet $a = new Foo; $b = clone $a; $c = $a; $a->attribut = 'solutionslinux'; echo $b->attribut; // attribut echo $c->attribut; // solutionslinux $a = &new Foo; $b = $a; $c = &$a; $a->attribut = 'solutionslinux'; echo $b->attribut; // attribut echo $c->attribut; // solutionslinux
  • 25. Modèle objet de PHP5 : visibilités Visibilités compatibles Grande compatibilité pour faciliter les migrations
  • 26. PHP5 introduit "public", "protected", "private" class Foo { var $a; // ok, pas de problème, sera publique function bar(); // idem : sera publique } class Foo { var $a; function bar(); }
  • 27. Modèle objet de PHP5 : casse Casse des méthodes, fonctions et classes En PHP, les classes et méthodes sont insensibles à la casse La casse est respectée en PHP5, elle ne l'était pas en PHP4 class Foo { function HeLLo() { } } class bAr extends Foo {} $a = new bar; echo get_class($a); // bAr print_r(get_class_methods($a)); // array ("HeLLo"); echo get_parent_class($a); //Foo class Foo { function HeLLo() { } } class bAr extends Foo {} $a = &new bar; echo get_class($a); // bar print_r(get_class_methods($a)); // array("hello"); echo get_parent_class($a); // foo
  • 28. Mode de compatibilité modèle objet PHP5 Mode de compatibilité PHP4 PHP.ini : zend.ze1_compatibility_mode
  • 29. Mis à zéro par défaut (comportement PHP5) Mettre cette directive à 1 permet d'utiliser le comportement objet de PHP4 dans PHP5 Utile pour migrer, mais rapidement
  • 30. Aucune application de production ne devrait tourner sous ce mode
  • 31. Il n'est ni sûr, ni stable
  • 32. Petits pièges du modèle objet All right ! False true false Fatal error Fatal error false true class Foo { public function bar() { $this = new Something; } } class Foo { public $foo; } $foo1 = new Foo; $foo2 = new Foo; $foo1->foo = $foo2; $foo2->foo = $foo1; var_dump($foo1 == $foo2); class Foo { } $foo = new Foo; var_dump(empty($foo)); var_dump((bool)$foo);
  • 33. Modèle objet de PHP5 en résumé Résumons <?php $a =& new Class; function foo(&$obj) { $obj->prop = 123; } $obj_copy = $obj; function &a() { $a =& new Object; return $a; } <?php $a = new Class; function foo($obj) { $obj->prop = 123; } $obj_copy = clone $obj; function a() { return new Object; }
  • 34. Le rapport d'erreurs Nouveau rapport PHP5 : E_STRICT Affiche des erreurs principalement relatives à la conception logicielle
  • 35. E_ALL n'inclut pas E_STRICT class Foo { public function maFonction($arg1) { } } class Bar extends Foo { public function maFonction($arg1, $arg2) { } } Strict standards: Declaration of Bar::maFonction() should be compatible with that of Foo::maFonction() in /media/data/www/labo/newfile.php on line 10 $a = &new Foo; Strict standards : ... ... class Foo { public function hello() { } } Foo::hello(); abstract static function bar();
  • 36. Le rapport d'erreurs PHP5 : E_RECOVERABLE_ERROR Erreur grave, mais n'ayant pas fait planté PHP en interne
  • 37. L'erreur doit être attrapée par un gestionnaire utilisateur
  • 38. Envoyée lors de problèmes de typage d'arguments Class Foo { public function maFonction( Linux $arg1) { } public static function errorHandler($errno, $errstr) { echo &quot;erreur attrapée : $errstr&quot;; } } set_error_handler(array('Foo, 'errorHandler')); $a = new Anaska; $a->maFonction(&quot;Autre chose qu'un objet Linux&quot;); erreur attrapée : Argument 1 passed to Foo::maFonction() must be an instance of Linux, string given, called in /media/data/www/labo/newfile.php on line 15 and defined ...
  • 39. Conclusions rapport d'erreurs en migration E_STRICT n'est pas activé par défaut La migration est plus simple
  • 40. Mais les erreurs seront tout de même présentes E_STRICT facilite la migration Il vous prévient si vous utilisez des &quot;&&quot;' où il ne faut pas
  • 41. Activez-le pour vous en rendre compte // php.ini error_reporting = E_ALL | E_STRICT
  • 42. Premières conclusions de migration Je ne suis pas obligé de renommer tous mes constructeurs en __construct() Un constructeur ayant le même nom que la classe fonctionne en PHP5 Je ne suis pas obligé de supprimer tous les appels au mot-clé &quot;var&quot; Il sera traduit en interne en &quot;public&quot; Je ne suis pas obligé de supprimer tous les &quot;&&quot; Ils génèrent une erreur E_STRICT qui par défaut est masquée
  • 43. Je peux aussi utiliser temporairement le mode de compatibilité
  • 44. Support XML PHP4 possède un support XML Bancal
  • 47. Plus adapté aux développements d'aujourd'hui PHP5 casse la compatibilité DOM remplace DOMXML Conclusion : il faudra très probablement réécrire son code
  • 48. Support MySQL Où est MySQL ?? Je ne vois plus MySQL !
  • 49. MySQL a-t-il disparu de PHP5 ?
  • 50. Support MySQL MySQL est toujours supporté ;-)
  • 51. LibMySQL n'est plus fournie dans la distrib par défaut Vous devez compiler avec --with-mysql à la main
  • 52. Sous Windows -> activer la/les dll nécessaires à la main Cessez d'utiliser ext/MySQL ! Ces fonctions existent toujours, pour des raisons de migration
  • 53. Mais dès que possible, abandonnez-les et passez à MySQLi ou PDO ext/MySQLi : extension MySQL &quot;i&quot;mproved
  • 54. PDO & PDO_MySQL PHP Data Object
  • 55. MySQLi Fonctions terminées par &quot;i&quot; mysqli_query() mysqli_connect() ...
  • 56. Grande compatibilité avec ext/MySQL Nouvelles fonctionnalités
  • 59. Orientation objet possible mais pas obligatoire
  • 60. Voyons un peu les différences ext/MySQL <-> ext/MySQLi
  • 61. Support MySQL de PHP : ext/MySQL Exemple avec ext/Mysql (Très) vieillissant, mais fonctionne toujours sous PHP5
  • 62. La connexion est implicite, les fonctions réutilisent la dernière mysql_connect('localhost', 'julien', 'anaska'); mysql_select_db('membres'); $age = 29; $sql = mysql_query(&quot;SELECT nom, prenom FROM membres WHERE age < $age&quot;); while ($result = mysql_fetch_array($sql)) { printf(&quot;%s %s a %d ans &quot; . PHP_EOL, $result['nom'], $result['prenom'], $age); } mysql_close();
  • 63. Support MySQL de PHP : ext/MySQLi Même exemple avec ext/Mysqli Code procédural
  • 64. La connexion n'est pas implicite, il faut la préciser aux fonctions C'est plus logique tout de même Certaines fonctions inversent des params. par rapport à ext/Mysql $db = mysqli_connect('localhost', 'julien', 'anaska', 'membres'); $age = 29; $sql=mysqli_query( $db ,&quot;SELECT nom, prenom FROM membres WHERE age < $age&quot;); while ($result = mysqli_fetch_array($sql)) { printf(&quot;%s %s a %d ans &quot; . PHP_EOL, $result['nom'], $result['prenom'], $age); } mysqli_close( $db );
  • 65. Support MySQL de PHP Comparons $db = mysqli_connect('localhost', 'julien', 'anaska', 'membres'); $age = 29; $sql=mysqli_query($db, &quot;SELECT nom, prenom FROM membres WHERE age < $age&quot;); while ($result = mysqli_fetch_array($sql)) { printf(&quot;%s %s a %d ans &quot; . PHP_EOL, $result['nom'], $result['prenom'], $age); } mysqli_close($db); mysql_connect('localhost', 'julien', 'anaska'); mysql_select_db('membres'); $age = 29; $sql = mysql_query(&quot;SELECT nom, prenom FROM membres WHERE age < $age&quot;); while ($result = mysql_fetch_array($sql)) { printf(&quot;%s %s a %d ans &quot; . PHP_EOL, $result['nom'], $result['prenom'], $age); } mysql_close();
  • 66. Conclusions MySQL migration vers PHP5 L'extension ext/MySQL existe toujours Migration facile et souple Il faudra songer à passer à MySQLi (ou PDO) MySQLi a une API très semblable à celle de MySQL
  • 67. Attention tout de même aux &quot;arguments inversés&quot; Et puis MySQLi c'est aussi ... Requêtes préparées
  • 71. API de gestion des serveurs MySQL (démarrage, réplication ...)
  • 72. Changement de comportement de fonctions Pour des raisons de performance, ou simplement de logique, le comportement de certaines fonctions PHP a changé de PHP4 à PHP5 array_merge()
  • 77. Changement de comportement de fonctions array_merge() PHP4 autorisait des paramètres de type non tableau, pas PHP5 Ip2long() PHP4 retourne -1 sur des adresses invalides, PHP5 retourne false Strrpos() PHP4 ne prend que le premier caractère, PHP5 cherche tout $a = array_merge(array(1,2,3), 4 ); //OK $a = array_merge(array(1,2,3), array(4) ); // OK $a = ip2long('127.0'); // -1 $a = ip2long('127.0'); // false echo strrpos(&quot;so l utionlinux&quot;, &quot;li&quot;); //2 echo strrpos(&quot;so l ution li nux&quot;, &quot;li&quot;); //8
  • 78. Conclusion Passer de PHP4 à PHP5 c'est souvent faire le ménage
  • 80. Migrer de PHP4 à PHP5 c'est ... Pouvoir designer ses applications avec UML
  • 81. Bénéficier d'un langage (beaucoup) plus performant et plus sécurisé
  • 82. Ecrire moins de lignes de code pour en faire plus
  • 84. Conclusion (finale...) PHP est le seul langage au monde porté sur le Web
  • 85. Le Web évolue à chaque seconde qui passe
  • 86. PHP5 est sorti en 2004
  • 87. PHP est libre et développé par une grande communauté