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] Instanciation d'une classe [Fait]


Sujet :

Langage PHP

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    530
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 530
    Points : 316
    Points
    316
    Par défaut [POO] Instanciation d'une classe
    Bonjour à tous,

    J'aimerai un petit renseignement technique

    Je voudrai savoir se qui se passe au niveau de l'occupation mémoire lors des différentes phases de l'utilisation d'une classe.

    1°) lors du include :
    tous le fichier de la class est il chargé dans la page ? ou juste l'adresse de la classe ?

    2°) lors de l'instanciation (new maClass() ) :
    toutes les fonctions sont elles lues, ou juste le constructeur ?

    autrement dit :

    faut-il chercher à réduire le volume de code d'une classe par l'utilisation de sous-classes qui ne seront appelées que si on a besoin de fonctions spécifiques ?

    Merci d'avance de m'éclairer un peu sur ces points

  2. #2
    Membre régulier Avatar de Grepsd
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2008
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2008
    Messages : 96
    Points : 119
    Points
    119
    Par défaut
    Bonjour,

    il me semble que l'interpréteur fait un premier passage et qu'il référence tout pour y accéder quand il en aura besoin(si c'est le cas), c'est pour ça qu'une erreur de syntaxe dans une fonction d'une classe inutilisé (class non instanciée, fonction non appelée) provoque tout de même une erreur.

    Pour répondre à ta question, oui je pense que tout est mis en mémoire pour être réutilisable rapidement.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    530
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 530
    Points : 316
    Points
    316
    Par défaut
    Salut Grepsd et merci de ta réponse.

    Il semble donc qu'il faille chercher à faire des classes ciblées (autant que possible ) et des sous classes avec des fonctions supplémentaires bien spécifiques.

    à éviter absolument les classes fourre-tout

    N'hésitez pas à continuer à me donner vos avis et conseils sur cette question.

    Je laisse ce POST ouvert encore un moment

    Si toutefois un modo pense à un moment qu'il faut le clore... ne pas hésiter à me le dire et je mettrai le tag "resolu"

    Bonne continuation à tous

    PS : quelqu'un a-t-il une idée de l'utilisation mémoire ou du temps d'execution d'une classe (pour un volume donné bien sûr) ?

    Je ne sais pas si on doit parler en nombre de lignes ou autre unité de mesure ?

  4. #4
    Membre régulier Avatar de Grepsd
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2008
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2008
    Messages : 96
    Points : 119
    Points
    119
    Par défaut
    http://fr2.php.net/manual/fr/functio...-get-usage.php
    http://fr2.php.net/manual/fr/functio...peak-usage.php

    et

    http://fr2.php.net/manual/fr/function.microtime.php

    Ça devrait t'aider à travailler.

    Mais oui il faut avoir des class portant sur une fonctionnalité précise et éviter les classes fourres-tout.

    Cependant le temps nécessaire pour l'interpréteur PHP à explorer ton code est relativement court, tant que tu n'abuse pas, tu resteras dans des proportions relativement acceptable, c'est le temps d'exécution qui pose souvent problèmes avec des scripts non optimisés/crado

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    530
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 530
    Points : 316
    Points
    316
    Par défaut
    Merci Grepsd,

    effectivement c'est une bonne idée de faire ce genre de tests

    d'autant que je dispose d'un programme web que j'avais écrit en procédural avant de le ré-écrire en objet.

    Au delà du coté plus pratique et plus clair de ce programme en POO ça vaut le coups de voir ce que cela donne au niveau des délais d'exécution.

    car même si cela se joue en quelques 1/100 de secondes c'est interessant de voir si c'est 1/100 ou 2/100 car on passe du simple au double.

    ça va pas être evident de comparer car la POO m'a permis de rajouter des fonctionnalités à la plupart des pages (surtout parce qu'elles sont devenues plus lisibles )

    Je viendrai mettre des résultats sur le forum des que j'aurai fait des tests.

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    138
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2005
    Messages : 138
    Points : 173
    Points
    173
    Par défaut
    Lorsque tu charge une page l'interpréteur charge tout tes includes liste les classe et méthodes qui pourront être appellé.

    Si par ailleur tu n'utilises (n'instancie pas) pas une des classes (je parle bien de classe POO) chargé, cela ne provoque en aucune manière des erreurs, c'est juste que ta page va mettre un pouillième de seconde de plus a se charger...

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    530
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 530
    Points : 316
    Points
    316
    Par défaut
    Ce qui me conduit tout de même à me poser une question.

    Il y a une foule de classes pré-définies en PHP, sont elles toutes chargées dès qu'un code php est détecté dans une page ?

    Puisqu'elles sont utilisable n'importe quand (date() par exemple).

    Où PHP sait-il juste ou elles sont pour les utiliser si besoin ?

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    138
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2005
    Messages : 138
    Points : 173
    Points
    173
    Par défaut
    php a beaucoup de FONCTION et non pas de classe pré-définies !

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    530
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 530
    Points : 316
    Points
    316
    Par défaut
    Quid de String, Math, etc.. ?

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    138
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2005
    Messages : 138
    Points : 173
    Points
    173
    Par défaut
    String, Math...
    T'aurais le lien de vers la doc officielle php car si elle existe, c'est tout nouveau pour moi ! Hors utilisation de framework (style zend et compagnie) je parle bien sur !!!

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    530
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 530
    Points : 316
    Points
    316
    Par défaut
    t'as sans doute raison pour Math (plutot javascript ) mais String par exemple c'est juste un type de données ?

    Et toutes les méthodes applicables aux String n'appartiennent pas à une classe String.

    C'est vraiment une question hein, pas du tout une affirmation

    Dans ce cas c'est un peu le même problème, toutes ces fonctions sont-elles chargées (comme pour un include d'un fichier de fonctions) dès qu'un code php est détecté dans la page ?

  12. #12
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    138
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2005
    Messages : 138
    Points : 173
    Points
    173
    Par défaut
    Citation Envoyé par Alexdezark Voir le message
    String c'est juste un type de données ?
    Oui comme integer .... voir settype()

    Citation Envoyé par Alexdezark Voir le message
    Et toutes les méthodes applicables aux String n'appartiennent pas à une classe String.
    La je te suis plus!!!

    Citation Envoyé par Alexdezark Voir le message
    Dans ce cas c'est un peu le même problème, toutes ces fonctions sont-elles chargées (comme pour un include d'un fichier de fonctions) dès qu'un code php est détecté dans la page ?
    Pas du tout car les fonctions font partie du coeur de php. Mon apache charge ma lib dynamique libphp5.so
    Ton code est interpreté mais les fonctions, IL ME SEMBLE, sont chargé au démarrage d'apache lorsque celui ci charge la lib php

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    530
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 530
    Points : 316
    Points
    316
    Par défaut
    Ce que je voulais dire c'est que par exemple si tu essaye de faire str_replace sur un Integer tu auras une erreur car cette fonction n'est pas faite pour être appliquée au type de donnée Integer.

    Et je pensais qu'il y avait des méthodes définies dans une classe String et qui de ce fait n'étaient pas applicable à une classe Integer ou autre.

    Mais je comprend que ce type de comportement puisse être défini dans le coeur du programme d'une manière totalement différente.

    Il est vrai qu'en y réflechissant un tout petit peu je vois bien que la syntaxe utilisée en général n'est pas du tout la même que la syntaxe utilisée en POO

  14. #14
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    138
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2005
    Messages : 138
    Points : 173
    Points
    173
    Par défaut
    C'est du pur procédural et non de la POO !!!

    str_replace(...)

    et non

    "toto"->replace(..)

    A moins que tu utilise un framework du style Zend (qui roXXe au passage )

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 14/09/2007, 08h55
  2. Réponses: 19
    Dernier message: 02/02/2006, 23h30
  3. Réponses: 3
    Dernier message: 02/12/2005, 15h58
  4. instanciation d'une classe
    Par firejocker dans le forum C++
    Réponses: 6
    Dernier message: 15/11/2005, 11h54
  5. Réponses: 7
    Dernier message: 10/11/2005, 10h09

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