begin process at 2010 02 10 13:49:07
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Class et Objet ( POO )

 > MOTEUR D'ASPECT POUR PHP

MOTEUR D'ASPECT POUR PHP


 Information sur la source

Note :
10 / 10 - par 2 personnes
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Class et Objet ( POO ) Classé sous :AOP, Aspect, Dynamique Niveau :Expert Date de création :22/02/2009 Date de mise à jour :22/02/2009 18:38:54 Vu / téléchargé :2 809 / 168

Auteur : LocalStone

Ecrire un message privé
Commentaire sur cette source (5)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Salut à tous,

Ça fait pas mal de temps que je ne suis pas venu sur PHPCS, et ce pour la raison suivante : le Java. Depuis l'année dernière, j'ai passé pas mal de temps à étudier le Java et le J(2)EE. Du coup, je n'ai pas eu beaucoup de temps à consacrer au PHP.

Mon petit voyage dans l'univers du Java m'a donné pas mal d'idée applicable au PHP. La présente source en est un exemple : un moteur d'aspect (je ne sais pas si le terme est vraiment juste ...).

Je ne compte pas faire de cours sur l'AOP, Wikipedia est là pour ça : http://fr.wikipedia.org/wiki/AOP.

Il faut savoir qu'il existe quelques librairies pour faire de l'AOP avec PHP, mais elles ont l'inconvénient de modifier les sources, ce que je ne voulais pas.

Du coup, j'utilise un objet proxy qui utilise lui-même la méthode magique __call() pour analyser les appels de méthodes et appliquer les aspects qui vont bien.

Source

  • La capture parle d'elle-même ! J'ai mis un petit exemple fonctionnel avec un aspect persistence.xml qui permet de sauvegarder, récupérer et mettre à jour en base de données les instances de la classe Person, de manière complètement transparente pour l'utilisateur.
  • Je ne suis pas sur que ce soit une très bonne manière d'utiliser l'AOP, mais il a le mérite d'être un exemple très parlant.
La capture parle d'elle-même ! J'ai mis un petit exemple fonctionnel avec un aspect persistence.xml qui permet de sauvegarder, récupérer et mettre à jour en base de données les instances de la classe Person, de manière complètement transparente pour l'utilisateur. 

Je ne suis pas sur que ce soit une très bonne manière d'utiliser l'AOP, mais il a le mérite d'être un exemple très parlant.

 Conclusion

Ma source n'est qu'une ébauche ou plutôt un proof-of-concept. Mais je suis ouvert à tous les commentaires afin de faire évoluer cette source !

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

22 février 2009 18:38:54 :
Ajout de la capture !

 Sources du même auteur

Source avec Zip [PHPHOOK] UN PETIT SYSTÈME DE GESTION DES HOOKS DE SUBVERSIO...
Source avec Zip [PHP5] TASKSCHEDULER, UN PETIT PLANIFICATEUR DE TÂCHE EN PHP...
Source avec Zip [PHP5] NAVIGUER DANS UNE COLLECTION À L'AIDE D'UNE PSEUDO SY...
Source avec Zip Source avec une capture CLASSE D'ÉDITION DES FICHIERS DE CONFIGURATION D'APACHE
SIMULER LA VISIBILITÉ PACKAGE (COMME EN JAVA)

 Sources de la même categorie

Source avec Zip POO - LOGGING PACKAGE par Waredan
POO - OBJECT CLASS par Waredan
Source avec Zip POO - FACTORY CLASS par Waredan
POO - SINGLETON CLASS par Waredan
POO - PARAMETERHOLDER CLASS par Waredan

 Sources en rapport avec celle ci

Source avec une capture GÉNÉRER UNE PROGRESSBAR (BARRE DE PROGRESSION) EN FORMAT IMA... par Tioneb
Source avec Zip Source avec une capture ONGLET GÉNÉRÉ EN PHP ET REQUETE AJAX par djmmix
Source avec Zip Source avec une capture CALENDRIER DE RÉSERVATION DYNAMIQUE REVUE ET AMÉLIORÉ par laryflashkod
Source avec Zip Source avec une capture CAMEMBERT 2D/3D par softwareds
Source avec Zip ORGANIGRAMME DYNAMIQUE par lptt320

Commentaires et avis

Commentaire de LocalStone le 22/02/2009 18:40:10

Lache tes coms! ^^ lol

Commentaire de coucou747 le 25/02/2009 09:00:02 10/10

OMG

c'est tres interessant.

t'as pas eu du mal a revennir vers php apres avoir fait du java ?

apres avoir fait du java, je lance kate pour faire du php, je tape $this-> et controle space, et j'attends betement que kate me liste les methodes de l'objet courrant, chose qu'il ne sait evidement pas faire :(

c'est une belle utilisation de la reflection, meme si je doute que ca soit tres utile en pratique.

Commentaire de aKheNathOn le 25/02/2009 17:22:25 10/10

C'est franchement génial !

L'exemple partant sur de l'ORM est sympa même si c'est pas l'utilisation la plus optimisée, mais on y voit bien le principe.

En terme de POA je part du principe que l'aspect est persistance.xml et que le joinpoint est aspect.php.

Petite question : étant donné que le principe est de cloisonner la logique métier en enlevant les contraintes inter-modulaires reposant sur par exemple sur des modules techniques tels que du log ou bien du requettage, dans ton point-cut pk et comment tu utilises une base de données (c'est créer des dépendances non ?) ?

Autre question, ton advice, on dirais qu'il ne gère que le mode d'exécution pendant (pas de mode avant appel et après appel).

Dernière question du type comment faire :

J'ai un module de transaction bancaire, un autre de log et un autre de transaction sql.

Je dois faire un action de retrait : vérifier le compte de l'utilisateur, si celui-ci à le droit de retirer la somme, je le fais. Dans les deux cas je stock un log de l'action et du résultat, ainsi que dans le cas d'un retrait, met à jour le solde du client dans la partie SQL.

Quels seraient les advices, et à quoi pourrait ressembler le join point ?

Merci d'avance pour tes réponses.
Bonne prog et à+,
Akh

Commentaire de LocalStone le 01/03/2009 00:26:26

@Coucou747: T'as pas idée du mal que j'ai eu pour revenir au PHP. Et le pire, c'est l'inverse : j'ajoute des [function] à toutes les méthodes et je préfixe toutes les variables alors que ça ne sert pas à grand chose en Java.

Et concernant l'intérêt de l'AOP ... Détrompe-toi ! C'est énormément utilisé ! C'est avec Hibernate (en Java) que j'ai compris à quel point c'était puissant (http://www.hibernate.org/) et donc indispensable :P.

@aKheNathOn: J'ai pas très bien compris la première question. Par contre, je peux te donner mon avis pour la seconde (je suis loin d'être un expert). Déjà, tu fais un aspect pour la journalisation, qui ne doit pas être bien sorcier. En gros, tu mets des advices autour de toutes les méthodes fonctionnelles qui t'intéressent. Ensuite, pour la partie transaction, tu fais un te mets autour de la méthode qui te permet de faire un retrait. Si aucune exception n'est lancée, alors ça veut dire que le mec à le droit de le faire, donc tu peux faire la transaction. Sinon, tu attrapes l'exception, tu ne fais pas la transaction et tu relances la transaction pour en faire profiter le reste de l'application.

Et tu as raison, je ne gère les pas les pointcuts avant et après une méthodes. Je ne me suis occupé que du pointcut "around", parce que c'est le plus puissant (et aussi parce que j'avais la flemme de faire le reste).

Il manque également deux choses importantes pour que l'on puisse utiliser mon module en pratique :

1. ce que j'appellerais un contexte d'aspect, qui permet de stocker des variables pour un aspect (des champs voire des méthodes que l'aspect peut appeler, sachant que ce context doit évoluer indépendamment pour chaque instance proxifiée par l'aspect) ;

2. des annotations, à la manière du Java, à placer autour de la déclaration des classes et des méthodes, utilisables par les aspects.

Voili voilou ! Merci pour vos commentaires en tout cas !  

Commentaire de stailer le 01/03/2009 10:53:46

Très bonne source... Mais pour moi, trop de séparation, tue la séparation. Probablement que sur un projet extrêmement dense l'AOP est utile, mais la, si je veux modifier le fichier attaché à ma classe je vais devoir aussi modifier ma classe. Je pense qu'il va y avoir une certaine perte de temps et une multiplication des fichiers.
C'est un avis personnel.

Pour finir, et à contre-courant : je n'ai aucun mal à faire du PHP alors que je m'éclate en C# et en Java. Ca n'a rien à voir, il a de nombreuses qualités que C# et Java n'ont pas et inversement.. Mais surtout : L'AUTOCOMPLETION EXISTE ! Elle fonctionne parfaitement avec Eclipse ou Netbeans ; )
Essayez les, vous les adopterez (sans parler du reste : SVN, multi-projets, accès direct aux objets, méthodes avec CTRL+clic et j'en passe....).

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

zone de liste dynamique [ par pheno ] est ce que qqun sait comment on fait pour mettre dans une zone de liste le contenu d un champ d une base de donnee mysql ????ce que j ai fait <sel Insertion d'image dynamique [ par Licorne974 ] je souhaiterais savoir si il y a un petit script php par là !qui permettrais dans la saisie d'un formulaire d'insérer 2 photos qui se trouve sur mon d gestion dynamique du site [ par najat ] je voudrais bien me donner une idée sur la gestion dynamique des sites par PHP tel que l'ajout de page au site en utilisant une base de donnée pour st PB d'envoi d'images dynamiques !!! [ par MangaII ] Coucou a tous !Bon, voilà mon soucis !Qd on créé un image dynamique en php, avec imagecreate ..., on fini tjs par l'envoyer au navigateur avec imagejp Inclusion d'un graphique dynamique ds une page WEB [ par cjulie24 ] CjulieHello,J'ai un p'tit souci et je suis à la recherche d'un bon samaritain !Voila, je suis en train de refaire un site et je dois inclure Calendrier dynamique [ par pyranhaz ] Bonjour,je cherche à me faire un calendrier dynamique dans lequel un simple fichier de création normal de calendrier (les 12 mois de l'année, les 30 o Menu Déroulant Dynamique que affiche deuxième menu [ par Salsaboy ] Comment construire deux formobjects type SELECT qui sont constuite dynamiquement et dont le contenu du premier doit afficher le contenu du deuxième, s génération d'une page dynamique [ par Cacogene ] Bonjour à tous,Je cherche à développer une saisie de textes par formulaires, puis utiliser ces données sur une page dynamique.Seul problème, mais de t [signature dynamique] comment on fait ? [ par Zenith ] Bonjour, depuis peu, je cherche a me forger une signature dynamique pour les forums phpbb et autres... j'ai telechargé le package SignDyn.zip present Menu dynamique [ par xionoxid ] BonjourJe cherche un bout de code ou un tutoriau qui pourrait expliquer comment on fait pour avoir un menu dynamique ( un formulaire dynamique )Par ex


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,576 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales