Maison > développement back-end > tutoriel php > Tutoriel PHP : Préface aux modèles de conception PHP

Tutoriel PHP : Préface aux modèles de conception PHP

黄舟
Libérer: 2023-03-04 08:30:01
original
1136 Les gens l'ont consulté

Lorsque vous essayez constamment de découvrir de nouvelles fonctionnalités à partir de vos applications, trouvez-vous que les solutions que vous proposez sont si similaires à certaines choses que vous avez mises en œuvre auparavant ? Si vous êtes programmeur (même si vous débutez depuis peu de temps), vous avez probablement répondu « oui ». Il semble que vous utilisiez un ancien code pour résoudre des problèmes récemment découverts lors du développement de logiciels. Vous avez peut-être réalisé que votre solution est un principe fondamental, une méthode qui peut être largement répétée non seulement par vous mais par tous les développeurs professionnels.

En fait, de nombreux problèmes de programmation sont rencontrés à plusieurs reprises, et de nombreuses méthodes de base (ou modèles de conception) utilisées pour résoudre ces problèmes ont émergé. Un modèle de conception est un modèle qui vous apprend à organiser votre code à l'aide de conceptions authentiques et fiables.

Histoire des modèles de conception

Le terme « modèle de conception » a été inventé à l'origine dans le domaine de l'architecture. Dans son livre de 1977 "A Pattern Language: Towns/Building/Construction", Christopher Alexander décrit certains problèmes courants de conception architecturale et explique comment utiliser cette collection de modèles existants et bien connus pour lancer de nouvelles conceptions efficaces. Le point de vue d'Alexander s'applique bien au développement de logiciels, et il existe un consensus à long terme sur l'utilisation des composants existants pour construire de nouvelles solutions.

Tous les modèles de conception ont des caractéristiques communes : un nom, un énoncé du problème et une solution.

L'identification d'un modèle de conception est importante car elle permet aux autres programmeurs de comprendre immédiatement le but de votre code sans avoir à l'étudier trop en profondeur (au moins grâce à cette identification, les programmeurs se familiariseront avec le modèle)).

La description du problème est utilisée pour illustrer le champ d'application de ce modèle. ?

La solution décrit l'exécution de ce modèle. Une bonne discussion sur un modèle de conception doit couvrir les avantages et les inconvénients de l’utilisation du modèle.

Un modèle est un moyen efficace de résoudre un problème spécifique. Un design pattern n'est pas une bibliothèque (une bibliothèque de code pouvant être incluse et utilisée directement dans votre projet) mais un modèle pour organiser votre code. En fait, il existe de nombreuses différences dans l’application d’une base de code et d’un modèle de conception.

Par exemple, une chemise que vous achetez dans un magasin est une bibliothèque de codes. Sa couleur, son style et sa taille sont déterminés par le designer et le fabricant, mais elle répond à vos besoins.

Cependant, s'il n'y a rien dans le magasin qui vous convient, vous pouvez alors créer votre propre chemise (dessiner sa forme, choisir le tissu et la confectionner ensemble). Mais si vous n'êtes pas tailleur, il vous sera peut-être facile de trouver un modèle approprié et de concevoir ensuite votre propre chemise selon ce modèle. En utilisant une maquette, vous pouvez obtenir une chemise bien conçue en moins de temps.

Revenant sur les logiciels, une couche d'extraction de données ou un CMS (système de gestion de contenu) est une bibliothèque - elle a été préalablement conçue et codée, si elle répond avec précision à vos besoins, alors c'est un bon choix. Mais si vous lisez ceci, vous avez peut-être découvert que les solutions de stock ne fonctionnent pas toujours pour vous. Maintenant que vous savez ce que vous voulez et que vous pouvez y parvenir, il ne vous reste plus qu'à avoir un modèle pour vous guider.

Une dernière réflexion : tout comme un modèle de couture, un design n'est pas d'une grande utilité en soi. Après tout, vous ne pouvez pas porter un modèle de vêtement – ​​il est simplement assemblé à partir de papier fin. De même, un modèle de conception logicielle n’est qu’un guide. Il doit être spécialement conçu en fonction des caractéristiques et des exigences du langage de programmation et de votre application.

Objectifs de ce livre

Le but de ce livre n'est pas de présenter de manière exhaustive diverses catégories de modèles de conception de logiciels, ni de développer un nouveau modèle de conception ou une nouvelle terminologie, mais de mettre en évidence l'introduction de certains bien -modèles de conception existants connus. Ce qui rend ce livre unique, c'est qu'il présente certains modèles de conception qui, à mon avis, sont utiles pour développer des applications WEB dynamiques, et montre comment implémenter ces modèles de conception en PHP.

Programmation orientée objet POO

L'un des avantages de ce livre est que tous les points de vue sont basés sur la POO, un modèle de conception très naturel, et sont implémentés à l'aide de la POO.

Si vous n'êtes pas familier avec la POO, il existe de nombreuses ressources connexes (livres, sites Web, magazines, cours, etc.) pour vous aider à mieux la comprendre. La plupart de la littérature POO vante ses avantages : réutilisation du code, robustesse du code, encapsulation du code, polymorphisme et extensibilité, qui sont tous également très importants et utiles. Cependant, je pense que le principal avantage de la POO est la façon dont elle vous encourage à décomposer vous-même les problèmes en modules traitables. Une conception et une mise en œuvre claires, divisées en modules plus petits, permettront à votre code d'être testé de manière plus approfondie et plus facile à comprendre et à maintenir.

Exigences de compétences du lecteur

Ce livre suppose que vous êtes déjà capable d'utiliser PHP couramment. En particulier, ce livre suppose que vous ayez déjà une connaissance pratique de PHP et de la syntaxe PHP et que vous compreniez les principes de base de l'exécution de code PHP en utilisant la POO. Ce livre n'est pas une introduction à la programmation PHP et n'est pas non plus destiné à introduire la programmation POO en PHP.

Comme tous les développeurs POO n'utilisent pas la même terminologie, lorsque de nouveaux termes sont introduits, je les définirai dans le texte ou dans la barre d'outils.

PHP4 et PHP5

Au moment où j'écris ce livre, PHP5 est sorti depuis un certain temps, mais n'a pas encore été largement adopté par la communauté publique. Dans mon propre travail, j'ai commencé à migrer de nouveaux travaux de développement d'applications vers l'environnement PHP5.0.3, et jusqu'à présent, je suis heureux de constater que PHP5 a une bonne compatibilité ascendante avec le code PHP4, et en même temps son modèle orienté objet est l'une des nouvelles fonctionnalités les plus importantes de PHP5.

Il existe de nombreux bons articles et guides qui traitent des différences subtiles entre les modèles d'objet entre les différentes versions de PHP. Mais en termes simples, PHP5 fournit :

Descripteur d'objet (sera expliqué ci-dessous, voir Chapitre 2 : La valeur du modèle objet pour plus de détails) ?

Meilleur constructeur (Nom unifié, aucun changement autorisé)?

Destructeur?

Visibilité (publique, protégée, privée pour les méthodes et propriétés)?

Gestion des exceptions (Vous pouvez choisir la nouvelle syntaxe try{}catch{ } pour déclencher des erreurs) ?

Classe statique ?

Image (vérifier dynamiquement les classes, méthodes, propriétés) ?

Masquage de type ?

PHP5 fournit également quelques fonctionnalités plus obscures :

De nouvelles méthodes magiques ?

__get() et __set() vous permettent de contrôler l'accès aux variables

__call() vous permet d'intercepter dynamiquement tous les attributs de l'objet appelé.

__sleep() et __wakeup() vous permettent de surcharger la méthode de sérialisation

__toString() vous permet de contrôler la façon dont une chaîne est utilisée pour décrire l'objet lui-même.

Chargement automatique (permet aux utilisateurs de charger automatiquement une classe lors de sa première objectivation) ?

Final (ne permet pas à cette méthode ou à une classe d'être surchargée par ses sous-classes) ?

Handle d'objet

La meilleure fonctionnalité de PHP5 est d'utiliser des handles pour définir des classes, similaires à un handle de fichier ou de base de données. L'utilisation d'un objet dans une fonction PHP ne copie plus implicitement l'objet, mais fournit un handle d'opération.

Pour voir la différence plus clairement, considérons les deux exemples suivants :

// Classe PHP4
class ExempleP1 {
var $foo;
function setFoo($ foo) {
$this->foo = $foo`;
}
function getFoo() {
return $this->foo;
}
}
function changeExample($param) {
$param->setFoo('blah');
return $param->getFoo();
}
$obj = new ExempleP1;
$obj->setFoo('bar');
echo $obj->getFoo(); // bar
echo ChangeExample($obj); >getFoo(); // bar

En PHP4, la variable $param dans la fonction changeExample() est une copie de $obj, donc cette fonction ne change pas $foo dans la valeur d'origine de l'objet, donc que la sortie finale de $obj->getFoo() est 'bar'.

En PHP5, puisque $obj n'est qu'un handle d'objet dans la fonction, la même fonction changeExample() affecte réellement l'objet d'origine. En d’autres termes, en utilisant des handles, il n’est pas nécessaire de copier et $param est l’instance $obj.

// Classe PHP5

class ExempleP2 {
protected $foo;
function setFoo($foo) {
$this->foo = $foo;
} > ;
echo $obj->getFoo(); // bar
echo ChangeExample($obj); //blah
echo $obj->getFoo(); // IMPORTANT, produit blah

Ce problème devient plus compliqué lorsque vous utilisez la variable $this dans d'autres objets ou dans le constructeur intégré de cet objet (__construct).

Il s'avère qu'en PHP4, vous devez presque toujours :

Créer un objet de référence, comme celui-ci $obj=?& new class;

Appeler la référence dans une fonction Objets, tels que function func(?&$obj_param){}

Capturer des objets en référençant des fonctions, telles que function &some_func(){} $return_obj=&some_funct()

In en fait, il existe maintenant des situations dans lesquelles vous devez également copier l'objet original. Dans mon code PHP4, je commente toujours toutes les tâches d'objet non référencées telles que la copie d'un objet explicite. À long terme, un commentaire aussi court peut réduire considérablement le casse-tête de toute personne chargée de la maintenance de votre code (Note du traducteur : un tel code est très maintenable). Les connaissances associées sur le passage de référence par valeur, le descripteur d'objet et la copie d'objet seront expliquées en détail dans le chapitre 2 « La valeur du modèle d'objet ».

Bien que je préfère personnellement utiliser PHP5 pour le développement, je pense que PHP4 continuera à être utilisé par nous pendant longtemps et que les projets publics existants continueront à prendre en charge PHP4. Par conséquent, ce livre fournit le même support pour les deux versions de PHP. Des exemples de codes pour les versions PHP4 et PHP5 sont fournis autant que possible. Dans chaque chapitre, chaque bloc de code (modifié dans différentes versions de PHP) est fourni avec les commentaires correspondants pour indiquer les modifications, tels que //php4 et //php5.

Bibliographie et autres ressources

Il existe ici de nombreux ouvrages de référence connexes pour vous aider à mieux apprendre les modèles de conception. Les « Bibles » (traduction du traducteur : les meilleurs livres) des modèles de conception sont Erich Gamma, Richard Helm, Ralph Johnson et John Vlissides (dont le travail fondateur est souvent appelé « Gang of Four » en abrégé « GOF »). est « Design Patterns : Principes de développement de logiciels orientés objet réutilisables » écrit au nom de quatre d'entre eux).

Concernant les "modèles de conception", le prochain livre le plus utile sur les modèles de conception d'applications PHP WEB est Patterns of Enterprise Application Architecture (Traduction du traducteur : Enterprise Application Architecture Model) publié par Martin Fowler. Alors que le livre de GOF contient tous les modèles de conception généraux, le livre de Fowler présente en détail de nombreux modèles de conception spécifiquement destinés au développement d'applications Web.

En outre, de nombreux sites Web fournissent également de riches ressources sur les modèles de conception. Un site Web particulièrement typique est la bibliothèque de modèles de Portland (http://cz.com/por/).

Un autre site sur les modèles de conception PHP est phpPatterns, et l'adresse en ligne est http://www.phppatterns.com.

Merci

Je suis très reconnaissant envers mon patron, où mes tâches et responsabilités me permettent de consacrer une partie de mon temps dans ce domaine qui m'intéresse, et je suis également reconnaissant à lui pour m'avoir apporté les connaissances et l'expérience qui m'ont donné la confiance nécessaire pour écrire ce livre.

Une autre source d'inspiration, d'idées et d'expérience pour moi est le forum de SitePoint (http://www.sitepoint.com). En particulier, les contributeurs qui consultent régulièrement le forum Advanced PHP possèdent une richesse de connaissances et d'expérience et constituent le groupe de personnes le plus généreux partageant leurs idées que j'ai trouvé en ligne. C'est grâce à ces ressources (Note du traducteur : site SitePoint) que je me suis connecté à SimpleTest (http://simpletest.sf.net), WACT (http://wact.sf.net) et bien d'autres qui me paraissent inestimables. Projet PHP. Dans les années à venir, j'espère que SitePoint continuera à être une riche ressource pour les développeurs PHP.

Ce livre ne serait évidemment pas possible sans les contributions et les efforts importants de l'équipe de développement PHP. Car ce sont eux qui ont développé un tel langage simple à utiliser, facile à apprendre, polyvalent et très adapté au développement d’applications WEB.

Enfin, je voudrais remercier Marco Tabini et tout le monde chez php|architect. Ce magazine (Note du traducteur : php|architect) est devenu la source de nombreux thèmes PHP différents, et ces thèmes sont publiés par des développeurs professionnels. Les conférences organisées par Macro et compagnie étaient également plutôt bonnes.

Ce qui précède est le contenu de la préface du didacticiel PHP : PHP Design Patterns. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (m.sbmmt.com) !


Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal