Résumé : Dans cet article, l'auteur nous montre diverses technologies avancées de POO en PHP à travers des exemples basés sur sa compréhension des concepts de POO. Comme l'a dit l'auteur : « L'imagination est la seule limitation.
» on leur montrera des techniques plus avancées.
Sérialisation (Sérialisation)
PHP ne prend pas en charge les objets persistants. En POO, un objet persistant est un objet qui peut conserver son état et ses fonctionnalités parmi les références dans plusieurs applications. Cela signifie avoir la possibilité de sauvegarder l'objet dans un fichier ou une base de données et de le charger. objet plus tard. C'est ce qu'on appelle le mécanisme de sérialisation. PHP dispose d'une méthode de sérialisation qui peut être appelée sur un objet, et la méthode de sérialisation peut renvoyer une représentation sous forme de chaîne de l'objet. Cependant, la sérialisation enregistre uniquement les données membres de l'objet et non les méthodes.
En PHP4, si vous sérialisez l'objet dans la chaîne $s, puis libérez l'objet, puis désérialisez l'objet dans $obj, vous pouvez continuer à utiliser les méthodes de l'objet ! Je ne recommande pas de faire cela car (a) il n'y a aucune garantie dans la documentation que ce comportement fonctionnera toujours dans les versions futures. (b) Cela peut conduire à un malentendu lorsque vous enregistrez une version sérialisée sur le disque et quittez le script. Lorsque vous exécuterez ce script plus tard, vous ne pouvez pas vous attendre à ce que lorsque vous désérialisez un objet, les méthodes de l'objet soient là, car la représentation sous forme de chaîne n'inclut aucune méthode.
Dans l’ensemble, la sérialisation en PHP est très utile pour sauvegarder les variables membres d’un objet. (Vous pouvez également sérialiser les tableaux et tableaux associés dans un fichier).
Exemple :
<?php
$obj=new Classfoo();
$str=serialize($obj);
//Enregistrer $str sur le disque
//Quelques mois plus tard
//Charger str depuis le disque
$obj2=désérialiser($str)
Vous avez restauré les données des membres, mais pas les méthodes (selon la documentation). Il en résulte le seul moyen d'accéder aux variables membres (vous n'avez pas d'autre moyen !) en utilisant quelque chose comme $obj2->x, alors ne l'essayez pas chez vous.
Il existe plusieurs façons de résoudre ce problème, je les laisse de côté car elles sont trop mauvaises pour cet article succinct. J'apprécierais volontiers les fonctionnalités entièrement sérialisées dans les versions ultérieures de PHP.
Utiliser des classes pour le stockage de données L'un des avantages de PHP et de la POO est que vous pouvez facilement définir une classe pour faire quelque chose et appeler la classe correspondante chaque fois que vous souhaitez l'utiliser. Supposons que vous disposiez d'un formulaire HTML qui permet à l'utilisateur de sélectionner un produit en sélectionnant le numéro d'identification du produit. Il y a des informations sur le produit dans la base de données et vous souhaitez afficher le produit, son prix, etc. Vous disposez de différents types de produits, et la même action peut signifier différentes choses pour différents produits. Par exemple, afficher un son peut signifier le jouer, mais pour d'autres types de produits, cela peut signifier afficher une image stockée dans une base de données. Vous pouvez utiliser la POO ou PHP pour réduire le codage et améliorer la qualité.
Définir une classe de produit, définir les méthodes qu'elle doit avoir (par exemple : affichage), puis définir une classe pour chaque type de produit, dérivée de la classe de produit (classe SoundItem, classe ViewableItem, etc.), couvrant les méthodes des produits dans cours pour les faire se comporter comme vous le souhaitez.
Nommez la classe en fonction du champ type de chaque produit dans la base de données. Une table de produits type peut avoir (champs id, type, prix, description, etc.)... Ensuite dans le script de traitement, vous pouvez la récupérer dans la base de données. Récupérez la valeur du type à partir de , puis instanciez un objet nommé type :
<?php
$obj=new $type(
$obj->action();
C'est une très bonne fonctionnalité de PHP. Vous pouvez appeler la méthode d'affichage ou d'autres méthodes de $obj sans tenir compte du type de l'objet. En utilisant cette technique, vous n'avez pas besoin de modifier le script pour ajouter un nouveau type d'objet, juste une classe pour le gérer.
Cette fonction est très puissante. Définissez simplement des méthodes sans tenir compte des types de tous les objets, implémentez-les dans différentes classes dans différentes méthodes, puis utilisez-les dans le script principal pour n'importe quel objet, non si... sinon, non Nécessite deux programmeurs, seulement heureux.
Vous convenez maintenant que la programmation est facile, que la maintenance est bon marché et que la réutilisabilité est vraie ?
Si vous gérez un groupe de programmeurs, l'attribution du travail est simple ; chaque personne peut être responsable d'un type d'objet et de la classe qui le gère.
L'internationalisation peut être réalisée grâce à cette technologie, il suffit d'appliquer la classe correspondante en fonction du champ de langue sélectionné par l'utilisateur, et ainsi de suite.
Copie et clonage
Lorsque vous créez un objet de $obj, vous pouvez copier l'objet en utilisant $obj2=$obj. Le nouvel objet est une copie (pas une référence) de $obj, il a donc l'état de $obj à ce moment-là. . Parfois, vous ne souhaitez pas faire cela. Vous souhaitez simplement générer un nouvel objet comme la classe obj. Vous pouvez appeler le constructeur de la classe en utilisant l'instruction new. Cela peut également être réalisé en PHP via la sérialisation et une classe de base, mais toutes les autres classes doivent être dérivées de la classe de base.
Entrer dans la zone de danger
Lorsque vous sérialisez un objet, vous obtenez une chaîne dans un certain format, que vous pouvez interroger si vous êtes intéressé, où, dans la chaîne, il y a le nom de la classe (super !) et vous pouvez le mettre est retiré comme :
<?php
$herring=serialize($obj);
$vec=explode(':',$herring);
$nam=str_replace(""",'',$vec[2]) ;
Donc, en supposant que vous créez une classe « Univers » et que vous forcez toutes les classes à s'étendre à partir de l'univers, vous pouvez définir une méthode de clonage dans l'univers, comme suit :
<?php
function clone() {
$
herring=serialize($ this);
éclater(':',$herring);
$nam=str_replace(""",'',$vec[2]);
$ret=new $nam;
return $ret;
}
}
/ /Puis
$obj=new Something();
//Développer depuis l'univers
$other=$obj->clone();
Ce que vous obtenez est un nouvel objet de classe Something, qui est identique à l'objet créé en utilisant la méthode new et en appelant le constructeur. Je ne sais pas si cela fonctionnera pour vous, mais c'est une bonne règle générale que la classe Universe connaisse le nom de la classe dérivée. L'imagination est la seule limite.
Cette instruction écrit l'heure actuelle.