1. Programmation objet
• La grande avancée de PHP 5
• Tous les ajouts sont facultatifs
• Le code PHP 4 est compatible
• Sauf .... le passage par copie des objets
2. La différence
function mod( $obj ) { $obj->test = ‘in’ ; }
$obj = new StdClass() ;
$obj->test = ‘out’ ;
mod( $obj ) ;
echo $obj->test ; // in ou out ?
3. Code déjà compatible ?
• Passage par référence explicite en PHP 4
• On utilise & (attention à ne pas en oublier)
• Compatible PHP 5 sans modification
• mais désactivation des erreurs strictes
4. Code non compatible ?
• zend.ze1_compatibility_mode = true
• interdit d’utiliser les nouveautés PHP 5
• stabilité non garantie
• Sinon : corriger votre code
• long, complexe, sans garantie de résultat
5. Problème
• Il n’y a aucune erreur de syntaxe
• Le code semble fonctionner
• Parfois ça fonctionne, d’autres pas
• Il faut comprendre le code pour le corriger
• Demande des tests exhaustifs
6. Corriger le code ?
• En haut de script :
ini_set(‘zend.ze1_compatibility_mode’,‘1’);
• Dans chaque classe :
function __clone() { ...debug_backtrace()... }
• Vérification ligne à ligne des résultats
• remplacer si nécessaire par “clone”
8. MySQL : solution
• Créer un utilisateur “spécifique PHP 4”
• Utiliser l’ancien système de mot de passe
• old_password() dans mysql à la création
• Mixer avec pdo/mysqli ?
• demande + de ressources (deux liens)
9. XML
• domxml et domxslt ont disparu
• remplacé par dom et xsl
• chercher “domxml” et “domdocument”
• Script d’émulation :
http://alexandre.alapetite.net/doc-alex/domxml-php4-php5/
10. La Migration
• Lire la documentation officielle, les livres
• Préparer un jeu de test exhaustif
• Choisir entre
• activer le mode de compatibilité
• passer réellement en php 5
11. Migration : avant
• Faire un code PHP 4 compatible
• pear::compat, dbal, mise à jour des libs
• Préparer les dev PHP 5
• garder une norme de codage PHP 4
(minuscules, extension mysql, etc.)
12. Migration : pendant
• Aucune solution parfaite :-(
• Préparer
• Faire des tests
• Corriger
• Faire des tests
• Corriger
• Faire des tests ...
13. Migration : après
• Régler les niveaux d’erreur (E_STRICT)
• Récupérer l’ancienne configuration php.ini
• Attention aux données partagées
• utilisateurs mysql (old_password)
• données sérialisées
• bibliothèques de code