IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[POO Optimisation] Règles d'écriture d'un site PHP


Sujet :

Langage PHP

  1. #1
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    octobre 2003
    Messages
    2 837
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : octobre 2003
    Messages : 2 837
    Points : 3 394
    Points
    3 394
    Par défaut [POO Optimisation] Règles d'écriture d'un site PHP
    Bonjour,

    Je suis habitué à écrire des applications PHP depuis près de 6 ans, cependant, je voudrais faire un bond en avant, au niveau architecture de mes applications, car j'ai une experience faible au niveau programmation orientée objet sur cette plateforme.

    Pour cela, j'ai voulu mettre en place un système de classes, permettant de simuler une sorte d'architecture multi-couches semblable à celles qui seraient disponible sous Java/J2EE par exemple.

    Je me pose de sérieuse questions quant à la performance d'une telle application, utilisant les objets à tout va, je m'explique :

    J'ai un ensemble de classes, chacune ayant un rôle défini ( des sortes de classes métier )
    Chacune de ces classes, possède des méthodes permettant d'obtenir un résultat, également sous la forme d'un objet.
    pour générer cet objet ( qui est un objet semblable à un DTO, Data Transfer Object ) je passe par d'autres classes d'une couche dite "basse" qui font la connexion à la base de données.

    Pour que tout ce beau monde fonctionne ensemble, je ne vois pour l'instant que ce système, mais je le trouve trop lourd :

    on arrive sur une page, par exemple index.php
    on inclue un fichier ( /classes/index.phpClasses.php ) qui contient les inclusions de classes nécessaires pour le bon fonctionnement de cette page. Chaque page contient son propre "fichier d'inclusions", ceci est une optimisation que j'ai faite, au lieu de _tout_ charger pour chaque page.
    je fais les traitements dont j'ai besoin sur l'index, avec les méthodes disponibles dans les classes qui ont étés loadées. Les classes loadées sont des classes métiers, qui elles-même, incluent d'autres classes de la couche "basse".

    Je trouve que ça fait beaucoup d'inclusion à chaque fois que l'index.php est appellée...

    Ma question est donc : quel sont les moyens standards, en developpement PHP, d'optimiser l'utilisation d'une telle architecture ?

    Merci d'avance pour toute aide à ce sujet
    K

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    octobre 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : octobre 2004
    Messages : 882
    Points : 691
    Points
    691
    Par défaut
    salut

    ton projet est realisable, je me sers du mvc, toutes les requetes sont redigées par un regles de réecriture sur mon controller(index.php)
    les fichiers(definission de classe) incluent sont géré par la fonction __autoload(php5) et par un fichier xml qui represente le file systeme
    en moyene j'ai 80 fichier d'inclus, ca passe sur serveur dedier avec APC, mais sur un serveur mutualiser je pense que c'est pas la peine d'y pensé

  3. #3
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    juillet 2004
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : juillet 2004
    Messages : 4 184
    Points : 9 092
    Points
    9 092
    Par défaut
    Bon après l'écriture d'un framework php maison pour diverse raison nous avons finalement ajouté à notre framework un charger de classes

    le premier point est l'utilisation de require_once dans cette derninère et nom pas include include_once et ou require. je conseille donc de relire la doc au sujet de ses quatre fonctions php.

    deuxième point le chargement de classes se fait toujours en chemin absolu à la mode unix. le charger transforme donc les c:\toto\truc en c:/toto/truc/

    troisièmement les fichiers de définitions de classe portent le même nom que la classe avec sensibilité à la casse. MaClasse => MaClasse.class.php

    Chaque classe en ayant besoin charge avec le chargeur de classe les classes qui lui sont nécessaire. sur le principe du import de java.

    des packages regroupant fonctionnellement des classes sont définis ils portent le nom de leur classes principale. le chargeur de package utilise le chargeur de classes pour importer toutes les classes d'un package lorsque cela est nécessaire. cela permet de charger un groupe de classes sans avoir à se préoccuper des chargements dans chacune d'elles.

    nous n'avons qu'un seul script exécutable dans le framwork
    son algo est simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    include loader;
    $ctrl = new controler();
    $ctr->run();
    aucun include dans le code. seulement des chargement de classe appelée au travers du loader.

    enfin nous faisons un grand usage du pattern de façade.
    une façade est une classe qui ne contient rien ou presque mais qui masque la complexité d'un ensemble fonctionnel. elle définit des méthodes qui masquent les classes sous jasante

    par exemple dans le déroulement d'un processus nous faisons
    $db est un objet qui représente la source de donnée ce n'est pas elle qui contient les donnée ni elle qui offre les méthode de manipulation de celle-ci. dans cet exemple ce sera plutôt un groupe de classes dédié à la manipulations de produit qui offre ce traitement.
    le rôle de la façade est donc de présenter des méthodes de haut niveau d'abstraction. à elle de déterminer quel objet quelle classe invoquer.

    dans ce contexte, la façade va être amené à instancier des classes. du coup elle va être amené à charger les fichiers de définition.
    nous avons donc mis dans les façade le nécessaire
    et nous concentrons les chargements des classes ainsi utilisé dans la façade. (nous utilisons le chargeur de classes pour cela)


    au final nous n'avons que peux d'endroits ou se trouve des appels au chargement de classes ces principes en oeuvre donne un seul lieu dans le code ou est fait appel à require-once (il est donc possible de tracer les appels) les appels au chargeur sont concentré dans le contrôleur les classes principales des packages et les façades.

    A+JYT

  4. #4
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    octobre 2003
    Messages
    2 837
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : octobre 2003
    Messages : 2 837
    Points : 3 394
    Points
    3 394
    Par défaut
    Merci pour ces informations
    D'autres idées parmis vous ?

    Si je comprend bien, on est toujours obligé de charger les classes métiers à chaque requête sur la page ? C'est lourd non ? Ca n'arrange pas les choses d'avoir des objets en static ( un peu du style singleton )

    A+
    K

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    octobre 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : octobre 2004
    Messages : 882
    Points : 691
    Points
    691
    Par défaut
    on est toujours obligé de charger les classes métiers à chaque requête sur la page
    oui

    'arrange pas les choses d'avoir des objets en static ( un peu du style singleton )
    que ce soit un sigleton ou autre il faut que le fichier de definission soit inclu, apres tu peut optimisé ton code avec un cache de bas niveau comme APC

  6. #6
    Membre expérimenté
    Avatar de guitou12
    Homme Profil pro
    Inscrit en
    juillet 2006
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : juillet 2006
    Messages : 1 077
    Points : 1 561
    Points
    1 561
    Par défaut
    Pour ma part j'ai 1 et 1 seul require par page, il appelle ma librairie de connection à la base.

    Dans cette librairie j'appelle toutes mes classes et tous mes fichiers d'options nécessaires au bon déroulement.

    C'est une première solution qui ne fonctionne pas trop mal mais qui pourrait être optimisée à la sauce sekaijin (avec son loader). Ca mériterai que je me penche dessus mais bon là j'ai d'autres priorités de débug
    Ex développeur Php / J2EE.
    Actuellement reconverti à SharePoint 2013

    Mon blog SP 2013

  7. #7
    Expert confirmé
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    février 2005
    Messages
    3 430
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : février 2005
    Messages : 3 430
    Points : 5 771
    Points
    5 771
    Par défaut
    __autoload à sauver ma vie. Depuis je dors mieux, je suis plus souriant, mon chat à un meilleur poil, doux et brillant.
    Non sans dec depuis que je l'utilise les inclusions je m'en préocupe plus.
    Dans mon appli j'ai plusieurs type de classe.
    Requete, Data, Controleur et les metiers. Ils sont préfixé.
    CtrlUtilisateur
    ReqUtilisateur
    ...
    Autoload ce charge de retrouver le fichier. Pour cela il faut respecté un peut le standart pour faciliter les choses. nom du fichier = nom de la classe.
    Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...

  8. #8
    Membre actif
    Profil pro
    Développeur Web
    Inscrit en
    septembre 2006
    Messages
    215
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : septembre 2006
    Messages : 215
    Points : 256
    Points
    256
    Par défaut
    Citation Envoyé par berceker united
    _
    Autoload ce charge de retrouver le fichier. Pour cela il faut respecté un peut le standart pour faciliter les choses. nom du fichier = nom de la classe.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    function __autoload($class) {
        $mapClass = array( 'MaClass' => 'MaClass.class.php',
                         'Erf        => 'Erf.event.class.php );
     
        require_once( $mapClass[$class] );
    }
    Plus besoin d'avoir le meme nom de fichier

    sahid

  9. #9
    Expert confirmé
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    février 2005
    Messages
    3 430
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : février 2005
    Messages : 3 430
    Points : 5 771
    Points
    5 771
    Par défaut
    Citation Envoyé par sahid
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    function __autoload($class) {
        $mapClass = array( 'MaClass' => 'MaClass.class.php',
                         'Erf        => 'Erf.event.class.php );
     
        require_once( $mapClass[$class] );
    }
    Plus besoin d'avoir le meme nom de fichier

    sahid
    Oui c'est l'une des astuces bravo mais bon ça revient presque à déclaré les include un par un.
    Pour ma part j'utilise ceci. C'est fixe


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Function __autoload($ClasseName){
    	if(substr($ClasseName,0,7)=='Display'){
    		require_once($_SERVER['DOCUMENT_ROOT'].'/xxx/admin/scripts/php/classes/produits/affichages/'.strtolower(substr($ClasseName,7,strlen($ClasseName))).'.php5');
    	}elseif(substr($ClasseName,0,8)=='ReqMysql'){
    		require_once($_SERVER['DOCUMENT_ROOT'].'/xxx/admin/scripts/php/classes/produits/donnees/requetes/'.strtolower(substr($ClasseName,9,strlen($ClasseName))).'.php5');
    	}elseif(substr($ClasseName,0,12)=='ReqSQlServer'){
    		require_once($_SERVER['DOCUMENT_ROOT'].'/xxx/admin/scripts/php/classes/produits/donnees/requetes/'.strtolower(substr($ClasseName,12,strlen($ClasseName))).'.php5');
    	}elseif(substr($ClasseName,0,4)=='Data'){
    		require_once($_SERVER['DOCUMENT_ROOT'].'/xxx/admin/scripts/php/classes/produits/donnees/'.strtolower(substr($ClasseName,4,strlen($ClasseName))).'.php5');
    	}elseif(substr($ClasseName,0,4)=='Ctrl'){
    		require_once($_SERVER['DOCUMENT_ROOT'].'/xxx/admin/scripts/php/classes/produits/controleurs/'.strtolower(substr($ClasseName,4,strlen($ClasseName))).'.php5');
    	}else{
    		require_once($_SERVER['DOCUMENT_ROOT'].'/xxx/admin/scripts/php/classes/produits/middleware/'.strtolower($ClasseName).'.php5');
    	}
    }
    Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...

  10. #10
    Membre actif
    Profil pro
    Développeur Web
    Inscrit en
    septembre 2006
    Messages
    215
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : septembre 2006
    Messages : 215
    Points : 256
    Points
    256
    Par défaut
    lol, vi sympa !

    un peux complex quand meme

    sinon je comprend pas pkoa tu dis que ca revien au meme que declarer les includes 1 par 1 ... je fais juste un require_once de mon fichier autoload.php ( qui contient cette fonction dans le fichier de démarrage de l'appli pi c tt

  11. #11
    Expert confirmé
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    février 2005
    Messages
    3 430
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : février 2005
    Messages : 3 430
    Points : 5 771
    Points
    5 771
    Par défaut
    Citation Envoyé par sahid
    lol, vi sympa !

    un peux complex quand meme

    sinon je comprend pas pkoa tu dis que ca revien au meme que declarer les includes 1 par 1 ... je fais juste un require_once de mon fichier autoload.php ( qui contient cette fonction dans le fichier de démarrage de l'appli pi c tt
    Oui ça parait complexe parce que mes classe sont préfixé soit par Ctrl, Req,Data,... mais les noms de fichier porte le radicale. Mais là c'est figé quelque soit la classe que je rajoute tant que je respecte le protocole.

    Dans ta fonction tu places physiquement les correspondances donc si tu as 100 classes tu devras faire 100 index en gros. Autant que tu faces cela en une seul ligne. Nom de fichier = nom de la classe du moin presque mais tu le gères.
    Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...

  12. #12
    Membre actif
    Profil pro
    Développeur Web
    Inscrit en
    septembre 2006
    Messages
    215
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : septembre 2006
    Messages : 215
    Points : 256
    Points
    256
    Par défaut
    ah vi, ok je comprend maintenant
    j'avais jamais trop pensé ca, comme ca.

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    octobre 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : octobre 2004
    Messages : 882
    Points : 691
    Points
    691
    Par défaut
    salut

    pour ma part je me base sur un fichier xml
    ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    <engine>
    		<xi:include href="./../../caameleonengine2/config/filerequire.engine.xml">
    			<xi:fallback>
       				<error>xinclude: filerequire.engine.xml n'a pas été trouvé</error>
       			</xi:fallback>
       		</xi:include>
    		<modules>
    			<arbo>
    				<class name="AccueilArbo" classname="AccueilArbo.class.php" link=""/>
    				<class name="Create_Module" classname="create_module.class.php" link=""/>
    				<class name="Gestion_profile" classname="gestion_profile.class.php" link=""/>
    				<class name="New_site" classname="new_site.class.php" link=""/>
    				<class name="Proprietes_Module" classname="proprietes_module.class.php" link=""/>
    				<class name="Proprietes_Site" classname="proprietes_site.class.php" link=""/>
    				<class name="Supp_Module" classname="supp_module.class.php" link=""/>
    				<class name="translate" classname="translate.class.php" link=""/>
    				<class name="Site_Profiles" classname="site_profiles.class.php" link=""/>
    			</arbo>
    			<batchs>
    				<class name="BatchsImportUser" classname="importUser.batchs.class.php" link=""/>
    			</batchs>
    voila ca me parait d'etre souple d'utilisation, et je pense ecrire un fichier de ini cle=>valeur de facon a etre plus rapide

  14. #14
    Expert confirmé
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    février 2005
    Messages
    3 430
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : février 2005
    Messages : 3 430
    Points : 5 771
    Points
    5 771
    Par défaut
    Citation Envoyé par jeff_!
    salut

    pour ma part je me base sur un fichier xml
    ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    <engine>
    		<xi:include href="./../../caameleonengine2/config/filerequire.engine.xml">
    			<xi:fallback>
       				<error>xinclude: filerequire.engine.xml n'a pas été trouvé</error>
       			</xi:fallback>
       		</xi:include>
    		<modules>
    			<arbo>
    				<class name="AccueilArbo" classname="AccueilArbo.class.php" link=""/>
    				<class name="Create_Module" classname="create_module.class.php" link=""/>
    				<class name="Gestion_profile" classname="gestion_profile.class.php" link=""/>
    				<class name="New_site" classname="new_site.class.php" link=""/>
    				<class name="Proprietes_Module" classname="proprietes_module.class.php" link=""/>
    				<class name="Proprietes_Site" classname="proprietes_site.class.php" link=""/>
    				<class name="Supp_Module" classname="supp_module.class.php" link=""/>
    				<class name="translate" classname="translate.class.php" link=""/>
    				<class name="Site_Profiles" classname="site_profiles.class.php" link=""/>
    			</arbo>
    			<batchs>
    				<class name="BatchsImportUser" classname="importUser.batchs.class.php" link=""/>
    			</batchs>
    voila ca me parait d'etre souple d'utilisation, et je pense ecrire un fichier de ini cle=>valeur de facon a etre plus rapide
    C'est pareille, tu dois en déclarer autant de fois que tu as de classe. Bon je dis cela ça veut pas dire que c'est pas bien mais c'est dommage de passer à coté d'une fonction qui offre une certaine souplesse d'écriture et de gestion.
    Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...

  15. #15
    Membre éclairé
    Profil pro
    Inscrit en
    octobre 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : octobre 2004
    Messages : 882
    Points : 691
    Points
    691
    Par défaut
    je suis naz en ce momment
    j'ai lut ce que tu a repondu a said
    mais je ne comprend pas ca
    'est pareille, tu dois en déclarer autant de fois que tu as de classe.
    dans ma fonction __autolaod j'appel une fonction qui parse mon xml et qui me retrouve la classe a appelé ( a noter que je peut mettre plusier classe par fichier si je le veux)

    je peut changer a tout momment l'emplacement d'un fichier, en modifier mon xml et je peut appeler d'autre fichier xml via xinclude

    OUI je declare dans mon xml toute mes classes mais une seule fois???
    mouarff je suis fatigué

  16. #16
    Membre habitué
    Profil pro
    Inscrit en
    novembre 2004
    Messages
    423
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : novembre 2004
    Messages : 423
    Points : 182
    Points
    182
    Par défaut
    Je ne comprends pas non plus Je ne vois pas en quoi ta méthode est plus simple re- , quand jeff_! ajoute une balise <class> dans son fichier xml toi tu ajoute un elseif dans la fonction __autoload.

  17. #17
    Membre actif
    Profil pro
    Développeur Web
    Inscrit en
    septembre 2006
    Messages
    215
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : septembre 2006
    Messages : 215
    Points : 256
    Points
    256
    Par défaut
    En faite, si j'ai bien compris...

    la fonction "berceker united" na plus besoin d'etre modifié, meme si il ajoute une classe a son projet ...il la place dans le rep ou elle doit etre et la fonction va la charger dans le rep qu'il faut quand il en a besoin.

    nous on doit a chaque nouvelle class modifier notre fonction en ajoutant la nouvelle classe ...

    enfin lol je crois que c ca le truc...

  18. #18
    Expert confirmé
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    février 2005
    Messages
    3 430
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : février 2005
    Messages : 3 430
    Points : 5 771
    Points
    5 771
    Par défaut
    Citation Envoyé par sahid
    En faite, si j'ai bien compris...

    la fonction "berceker united" na plus besoin d'etre modifié, meme si il ajoute une classe a son projet ...il la place dans le rep ou elle doit etre et la fonction va la charger dans le rep qu'il faut quand il en a besoin.

    nous on doit a chaque nouvelle class modifier notre fonction en ajoutant la nouvelle classe ...

    enfin lol je crois que c ca le truc...
    Voila tu as tout compris.
    Les condition servent a detecter dans quel répertoires doit être cherché la classe.
    Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...

  19. #19
    Membre habitué
    Profil pro
    Inscrit en
    novembre 2004
    Messages
    423
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : novembre 2004
    Messages : 423
    Points : 182
    Points
    182
    Par défaut
    Ah, ok. Donc tu pourrais avoir une classe appelée DisplayMaClasse et cette classe se trouverait donc dans le fichier /xxx/admin/scripts/php/classes/produits/affichages/MaClasse.php ?

    Ai-je bien compris ?

  20. #20
    Expert confirmé
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    février 2005
    Messages
    3 430
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : février 2005
    Messages : 3 430
    Points : 5 771
    Points
    5 771
    Par défaut
    Citation Envoyé par JuTs
    Ah, ok. Donc tu pourrais avoir une classe appelée DisplayMaClasse et cette classe se trouverait donc dans le fichier /xxx/admin/scripts/php/classes/produits/affichages/MaClasse.php ?

    Ai-je bien compris ?
    Tu as bien compris.
    Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...

Discussions similaires

  1. Régle d'écriture avec variable
    Par hervedum35 dans le forum Apache
    Réponses: 7
    Dernier message: 10/08/2008, 01h01
  2. Réponses: 3
    Dernier message: 29/04/2008, 14h24
  3. [POO] Structure de site : PHP et objet, la séparation
    Par Ministar dans le forum Langage
    Réponses: 1
    Dernier message: 23/01/2008, 09h58
  4. Réponses: 4
    Dernier message: 15/07/2007, 00h07
  5. Réponses: 1
    Dernier message: 14/02/2007, 09h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo