Migration PHP4-PHP5

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

1 comments

Comments 1 - 1 of 1 previous next Post a comment

Post a comment
Embed Video
Edit your comment Cancel

1 Favorite

Migration PHP4-PHP5 - Presentation Transcript

  1. Migrer de PHP4 à PHP5 Analyse de code et revue des principaux changements
  2. 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
  3. 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
  4. Plan
    • PHP5 : un vrai modèle objet
    • Traitements XML améliorés
    • Utilisation de bases de données
      • MySQL
    • Changements dans les fonctions
    • Conclusion
  5. 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 " -> "
  6. 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;
  7. 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é'
  8. 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
  9. 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(); }
  10. 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
  11. 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
      • Aucune application de production ne devrait tourner sous ce mode
      • Il n'est ni sûr, ni stable
  12. 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);
  13. 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; }
  14. Le rapport d'erreurs
    • Nouveau rapport PHP5 : E_STRICT
      • Affiche des erreurs principalement relatives à la conception logicielle
      • 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();
  15. Le rapport d'erreurs
    • PHP5 : E_RECOVERABLE_ERROR
      • Erreur grave, mais n'ayant pas fait planté PHP en interne
      • L'erreur doit être attrapée par un gestionnaire utilisateur
      • 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 ...
  16. Conclusions rapport d'erreurs en migration
    • E_STRICT n'est pas activé par défaut
      • La migration est plus simple
      • 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
      • Activez-le pour vous en rendre compte
    // php.ini error_reporting = E_ALL | E_STRICT
  17. 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
      • Je peux aussi utiliser temporairement le mode de compatibilité
  18. Support XML
    • PHP4 possède un support XML
      • Bancal
      • Pénible à utiliser
      • Peu étendu
      • 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
  19. Support MySQL
    • Où est MySQL ??
      • Je ne vois plus MySQL !
      • MySQL a-t-il disparu de PHP5 ?
  20. Support MySQL
    • MySQL est toujours supporté ;-)
    • LibMySQL n'est plus fournie dans la distrib par défaut
      • Vous devez compiler avec --with-mysql à la main
      • Sous Windows -> activer la/les dll nécessaires à la main
    • Cessez d'utiliser ext/MySQL !
      • Ces fonctions existent toujours, pour des raisons de migration
      • Mais dès que possible, abandonnez-les et passez à MySQLi ou PDO
    • ext/MySQLi : extension MySQL &quot;i&quot;mproved
    • PDO & PDO_MySQL
      • PHP Data Object
  21. MySQLi
    • Fonctions terminées par &quot;i&quot;
      • mysqli_query() mysqli_connect() ...
      • Grande compatibilité avec ext/MySQL
    • Nouvelles fonctionnalités
    • Stabilité accrue
    • Performances
    • Orientation objet possible mais pas obligatoire
    • Voyons un peu les différences ext/MySQL <-> ext/MySQLi
  22. Support MySQL de PHP : ext/MySQL
    • Exemple avec ext/Mysql
      • (Très) vieillissant, mais fonctionne toujours sous PHP5
      • 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();
  23. Support MySQL de PHP : ext/MySQLi
    • Même exemple avec ext/Mysqli
      • Code procédural
      • 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 );
  24. 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();
  25. 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
      • Attention tout de même aux &quot;arguments inversés&quot;
    • Et puis MySQLi c'est aussi ...
      • Requêtes préparées
      • Transactions
      • Connexions persistantes (PHP 5.3)
      • Requêtes multiples
      • API de gestion des serveurs MySQL (démarrage, réplication ...)
  26. 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()
      • ip2long()
      • strrpos()
      • strripos()
      • strtotime()
  27. 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
  28. Conclusion
    • Passer de PHP4 à PHP5 c'est souvent faire le ménage
    • PHP5 incarne l'actualité
    • Migrer de PHP4 à PHP5 c'est ...
      • Pouvoir designer ses applications avec UML
      • Bénéficier d'un langage (beaucoup) plus performant et plus sécurisé
      • Ecrire moins de lignes de code pour en faire plus
      • Industrialiser ses projets
  29. Conclusion (finale...)
    • PHP est le seul langage au monde porté sur le Web
    • Le Web évolue à chaque seconde qui passe
    • PHP5 est sorti en 2004
    • PHP est libre et développé par une grande communauté

+ AlterWayAlterWay, 8 months ago

custom

1470 views, 1 favs, 1 embeds more stats

Migration PHP4-PHP5

More info about this document

© All Rights Reserved

Go to text version

  • Total Views 1470
    • 1468 on SlideShare
    • 2 from embeds
  • Comments 1
  • Favorites 1
  • Downloads 0
Most viewed embeds
  • 2 views on http://static.slidesharecdn.com

more

All embeds
  • 2 views on http://static.slidesharecdn.com

less

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

Cancel
File a copyright complaint
Having problems? Go to our helpdesk?

Categories