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] Différence entre POO et procédural [Fait]


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2003
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 194
    Points : 118
    Points
    118
    Par défaut [POO] Différence entre POO et procédural
    Bonjour, voyant beaucoup d'offre d'emploi recherchant des développeurs connaissant la POO je me suis décidé (difficilement) à me mettre à cette méthodologie tordue (désolé c'est comme ça que je la voie pour l'instant). Mais voilà mon premier problème, qu'elle est la diférence entre ce code que j'ai l'habitude d'utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $php_config['dbhost'] = 'localhost';
    $php_config['dbuser'] = 'root';
    $php_config['dbpassword'] = '';
    $php_config['dbname'] = 'ma_bdd';
    sachant que je l'utiliserais de cette manière :
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    function php_dbConnect()
    {
    	global $php_config;
    	global $php_db_link;
     
    	$php_db_link = mysql_pconnect ($php_config['dbhost'], $php_config['dbuser'], 
    		$php_config['dbpassword']);
     
    	if(!$php_db_link)
    	{ echo "Connexion impossible"; }
     
    	if(mysql_select_db($php_config['dbname'], $php_db_link) && $php_db_link)
    	{
    		return $php_db_link;
    		$setCharsetQuery = mysql_query("SET NAMES 'utf8'");
    	}
    	else
    		{ echo "Connexion à la base " . $php_config['dbname'] . " impossible"; }
     
    }
    function php_dbQuery($query)
    {
    	global $php_db_link;
     
    	// Connection à la Bdd si nécessaire
    	if (!$php_db_link && !php_dbConnect())
    		return false;
     
    	return @mysql_query($query, $php_db_link);
    }
    et ce code que je "devrais" utiliser :
    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
     
    class AAConf{
        private $databaseURL = "localhost";
        private $databaseUName = "root";
        private $databasePWord = "";
        private $databaseName = "ma_bdd";    
     
        function get_databaseURL(){
                return $this->databaseURL;
            }
        function get_databaseUName(){
                return $this->databaseUName;
            }
        function get_databasePWord(){
                return $this->databasePWord;
            } 
        function get_databaseName(){
                return $this->databaseName;
            } 
    }
    J'ai beau tourner ça de toute les façon possible et même en regardant le code plus en détail je comprends pas l'utilité de faire plus compliqué.
    Pourquoi faire en 13 ligne ce que l'on peut faire en 4 lignes ?? Esprit shadock inside ou c'est autre chose ??
    Aidez moi s'il vous plait !
    Si tout semble bien marcher c'est que vous avez oublié quelque chose !

  2. #2
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Vu sur cet exemple, c'est effectivement simple, mais quand il s'agira de parler d'héritage et de composition d'objets, les tableaux ne pourront plus suivre.

    La POO sur le code que tu nous a donné, c'est effectivement un bazooka pour écraser une mouche, mais tu te retrouverais fort dépourvu avec ta tapette en plastique devant un char d'assault...
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2003
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 194
    Points : 118
    Points
    118
    Par défaut
    mouais tu m'aide pas beaucoup sur ce coup !
    Est-ce qu'il existerait pas un cours qui m'explique les avantages de faire un site en objet et les inconvénients de le faire en procédural ?? Ça m'aiderais beaucoup je pense !
    Si tout semble bien marcher c'est que vous avez oublié quelque chose !

  4. #4
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Pour faire simple etrester sur ton exemple , dans tes fonctions de bdd que se passe t'il si tu décides de passer a postgres par exemple ?
    Tu recode tout.

    En POO en ayant utiliser une couche d'abstraction , tu changes juste le type de base de données et tout est transparent pour toi (sous réserve que les requetes soient aux normes évidemment ). Rien a retoucher , 3 jours de gagner.

    Au départ la POO peut sembler lourde à mettre en place , mais niveau maintenabilité et évolution la procédural à des années lumière de retard
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Citation Envoyé par grunk Voir le message
    la procédural à des années lumière de retard D
    Je ne parlerais pas de retard. Il s'agit juste de deux visions pour deux utilisations.
    J'ai vu certains sites codés en tout objet pour 5 pages web.
    J'aurais fait plus court, plus performant et tout aussi maintenable en procédural.
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  6. #6
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Citation Envoyé par Golork Voir le message
    mouais tu m'aide pas beaucoup sur ce coup !
    Est-ce qu'il existerait pas un cours qui m'explique les avantages de faire un site en objet et les inconvénients de le faire en procédural ?? Ça m'aiderais beaucoup je pense !
    Tiens, j'étais pas mécontent de ma métaphore, tant pis.
    A ma connaissance, et d'après mes recherches, il manque cruellement un ouvrage sur ce sujet en particulier. Surtout pour un langage de script tel que ph, qui est différent d'un langage fortement typé comme Java/.Net
    Si tu trouves, je suis preneur de l'info.

    Et puis en l'occurence, que ce soit pour de l'objet ou du procédural, j'aurais plutôt fait ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    define('DB_URL', "localhost");
    define('DB_UName', "root");
    define('DB_PWord', "");
    define('DB_Name', "ma_bdd");
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  7. #7
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Points : 2 351
    Points
    2 351
    Par défaut
    Citation Envoyé par Golork Voir le message
    J'ai beau tourner ça de toute les façon possible et même en regardant le code plus en détail je comprends pas l'utilité de faire plus compliqué.
    Pourquoi faire en 13 ligne ce que l'on peut faire en 4 lignes ?? Esprit shadock inside ou c'est autre chose ??
    Aidez moi s'il vous plait !
    Ce que tu as écrit comme code a de quoi te décourager je comprends :-)
    tu a réécrit un tableau php avec un objet pour y accéder, c'est en effet plus
    compliqué et sans intérêt.

    Reprenons ton exemple sous un autre angle. Imaginons que tu as besoin
    d'accéder à deux bases de données simultanément pour copier certaines
    données de l'une à l'autre. Comment résoudre ce problème avec le code
    que tu as écrit.

    Une approche serait de créer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $php_config2['dbhost'] = 'server2';
    $php_config2['dbuser'] = 'user2';
    $php_config2['dbpassword'] = 'pw2';
    $php_config2['dbname'] = 'ma_bdd2';
    mais tout ton code est lié à $php_config, et la ligne suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ... mysql_pconnect ($php_config['dbhost'], ...
    devrait être dédoublée et tu serais tenté d'écrire une nouvelle fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    function php_dbConnect2()
    {
      ...
    }
    Imaginons maintenant un objet de connexion à une base de donnée très
    simplifié ici pour l'exemple:
    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
     
    class DbConnection {
      function DbConnection($server, $dbname, $user, $password) {
        $this->server = $server;
        $this->dbname = $dbname;
        $this->user = $user;
        $this->password = $password;
      }
     
      function connect() {
        $this->db_link = mysql_pconnect ($this->server, $this->user, $this->password);
        mysql_select_db($this->dbname, $this->db_link);
    }
     
      function query($sql) {
        return mysql_query($sql, $this->db_link);
      }
    }
    Avec un tel objet tu peux créer de multiples instances, par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $db1 = new DbConnection('serveur1', 'dbname1', 'user1', 'password1');
    $db2 = new DbConnection('serveur2', 'dbname2', 'user2', 'password2');
    $db1->connect();
    $db2->connect();
    $result = $db1->query("SELECT ...");
    ...
    $db2->query("UPDATE ...");
    chaque instance de l'objet a son propre "espace mémoire" contrairement
    à l'unique tableau global de ton code.

    En travaillant de cette manière tu regroupe les variables nécessaires à la
    fonctionnalité souhaitée avec les méhtodes (fonctions) utiles pour cette
    fonctionnalité (notion POO d'encapsulation)

    je pense que ton intérêt premier pour la POO viendra rapidement quand
    tu aura compris l'utilisation de l'opérateur $this-> qui permet d'accéder
    à l'espace mémoire de l'instance.

    J'espère avoir pu un peu répondre à ta question, c'est un sujet vaste.
    Si ton code fait plus d'une ligne, c'est que tu as mal choisi ton langage !

  8. #8
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Points : 2 284
    Points
    2 284
    Par défaut
    De plus, ton exemple ne montre même pas l'interet d'avoir des classes bien structurées et logiquement organisée, il n'y à qu'à voir son nom AAConf, qui à mon sens ne veut pas dire grand chose.
    (un exemple de hiérarchie, compliquée, mais tirant partie du modèle objet à plein régime http://msdn.microsoft.com/en-us/libr...stem.data.aspx).


    Chose que l'on ne fait pas forcément en procédurale, ou que l'on délaisse à cause de la pauvreté des possibilités offertes.

    En objet, cette possibilité offerte, de hiérarchisé et organisé finement ses classes, donne beaucoup de corps à son code, et le rend, je pense plus simple à lire et comprendre.

    Toujours par rapport à ton exemple, même si il y à des tas de manières de le coder, à un moment donné tu te retrouves avec de jolies variables globales ( Joker pour les constantes ).
    Qui dit globales, dit perte de contrôle. En effet rien ne te dit que demain une variable ne va pas écraser celle que tu as définis parce que le développeur d'à côté là nommée pareillement.
    Bien sur on pourra toujours utiliser le mot clef static de php5, mais c'est un mot clefs venant du monde objet

    Bref, le modèle objet apporte plein de chose bénéfique, et c'est important de savoir en tirer partie à bon escient.
    La dessus, on est d'accord ton exemple en est loin.
    Mais php5 te permet de mixer les deux, alors pourquoi ne pas te laisser tenter, tu pourras toujours choisir de ne pas utiliser le modèle objet plus tard, lorsque tu en auras saisit les bases.

    a plus

  9. #9
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2003
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 194
    Points : 118
    Points
    118
    Par défaut
    Merci beaucoup marcha !! Ton explication m'a convaincu !
    En fait c'est le dernier bout de code que tu as mis, qui m'a rappelé ce que je faisait quand je me connectait à une base de donnée en Delphi avec le modèle ADO... Et je vient de me rendre compte que j'ai déjà programmé en objet mais je ne m'en était jamais rendu compte... Je ne faisait pas d'objet mais j'utilisais ceux déjà existant ! Il m'a suffit de remplacer "->" (php) par "." (delphi) pour réaliser que c'était la même chose...
    Et en regardant un peu plus les tuto je suis tombé sur PDO, que je comprend dans l'utilisation (pas dans la conception), et qui ressemble beaucoup à ADO (marrant la ressemblance). Je pense que le fait que je n'ai jamais essayé de me connecter à plusieurs BDD m'a empêché de voir les limites du procédural !

    Maintenant, comme tu l'as dit, il faut que je comprenne ce que signifie "$this->", où et comment l'utiliser !
    Car il y a la question que je me pose souvent : comment faire pour que "$db1" puisse t'être utilisé sur d'autres pages que là où elle a été instancié ?
    Genre page1,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $db1 = new DbConnection('serveur1', 'dbname1', 'user1', 'password1');
    $db1->connect();
    $result = $db1->query("SELECT ...");
    et page2 comment utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $db1->query("UPDATE ...");
    Si tout semble bien marcher c'est que vous avez oublié quelque chose !

  10. #10
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Points : 2 351
    Points
    2 351
    Par défaut
    Là tu aborde une problématique de conception plus générale.

    Suivant l'ampleur de ton application tu peux t'organiser très différemment, voici
    une manière de faire:

    Dossier Racine de ton Site:
    /libs/dbconnection.class.php ; Le fichier contenant la class et c'est tout
    /core/dbutil.php
    /page1.php
    /page2.php

    dans mon exemple, le dossier /libs/ devrait contenir que des fichiers php
    réutilisables d'une application à une autre dans tes développements

    /core/dbutil.php serait un petit script qui crée une instance de connexion
    pour ton application courante et offre quelques fonctionnalités souvent utilisées
    par tes pages.

    dans page1.php et page2.php tu place un require_once('core/dbutil.php');

    exemple de dbutil.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    require_once('libs/dbconnection.class.php');
    $db = new DbConnection(....);
     
    function getUser($id) {
      global $db;
      $result = $db->query("SELECT * FROM users WHERE user_id='$id'");
      ...
    }
    Si ton code fait plus d'une ligne, c'est que tu as mal choisi ton langage !

  11. #11
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2003
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 194
    Points : 118
    Points
    118
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function DbConnection($server, $dbname, $user, $password)
    bon ça je comprend.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->server = $server;
    là je bloque, à moins que si je change les variable de la sorte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function DbConnection($var1, $var2, $var3, $var4)  {
        $this->var1= $server;
        $this->var2= $dbname;
        $this->var3= $user;
        $this->var4= $password;
    }
    est-ce que le reste du code (fonction connect()) va fonctionner sans changement ??
    Si tout semble bien marcher c'est que vous avez oublié quelque chose !

  12. #12
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Un peu de lecture ?

    Cours de POO
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  13. #13
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2003
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 194
    Points : 118
    Points
    118
    Par défaut
    Citation Envoyé par marcha Voir le message
    exemple de dbutil.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    require_once('libs/dbconnection.class.php');
    $db = new DbConnection(....);
     
    function getUser($id) {
      global $db;
      $result = $db->query("SELECT * FROM users WHERE user_id='$id'");
      ...
    }
    Ah tient maintenant je comprends l'utilisation de "require_once" ...
    OK maintenant cela devient de plus en plus clair tout ça !!

    @jml94 et tous les autres, j'ai beaucoup plus appris en quelques minutes ici qu'en 5 mois de formation APTA, mais je vais quand même lire ce cours de POO maintenant que j'ai de meilleures bases !

    Edit : et si j'instancie une nouvelle classe dans la page1, pour que je puisse l'utiliser dans la page2 je suis obligé d'instancier toutes mes classes dans un fichier et de l'inclure avec un "require_once" ?? Je suis pas sûr d'avoir été clair...
    Si tout semble bien marcher c'est que vous avez oublié quelque chose !

  14. #14
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Points : 2 351
    Points
    2 351
    Par défaut
    Attention tu mélange:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    function DbConnection($var1, $var2, $var3, $var4)  {
        $this->server = $var1;
        $this->dbname = $var2;
        $this->user = $var3;
        $this->password = $var4;
    }
    La fonction DbConnection portant le même nom que la class (syntaxe Php4, voir
    __construct si PHP5) elle est appelée lorsque tu instancies (crée un instance).

    ex: $db1 = new DbConnection('a', 'b', 'c', 'd');

    le constructeur a pour rôle d'initialiser l'état de l'instance, très souvent
    une simple copie des paramètres donné vers des variables membre.
    Si ton code fait plus d'une ligne, c'est que tu as mal choisi ton langage !

  15. #15
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Points : 2 351
    Points
    2 351
    Par défaut
    Citation Envoyé par Golork Voir le message
    Edit : et si j'instancie une nouvelle classe dans la page1, pour que je puisse l'utiliser dans la page2 je suis obligé d'instancier toutes mes classes dans un fichier et de l'inclure avec un "require_once" ?? Je suis pas sûr d'avoir été clair...
    essayons déjà d'éclaircir un point.

    page1 et page2 ? ce sont des urls différents dans ton site/application ?
    Si ton code fait plus d'une ligne, c'est que tu as mal choisi ton langage !

  16. #16
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2003
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 194
    Points : 118
    Points
    118
    Par défaut
    Citation Envoyé par marcha Voir le message
    Attention tu mélange:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    function DbConnection($var1, $var2, $var3, $var4)  {
        $this->server = $var1;
        $this->dbname = $var2;
        $this->user = $var3;
        $this->password = $var4;
    }
    oui tu as raison je suis bête d'avoir mélangé alors que je le savais...
    Citation Envoyé par marcha Voir le message
    La fonction DbConnection portant le même nom que la class (syntaxe Php4, voir
    __construct si PHP5) elle est appelée lorsque tu instancies (crée un instance).
    aïe j'ai pas encore assimilé cette notion de constructeur...
    Citation Envoyé par marcha Voir le message
    le constructeur a pour rôle d'initialiser l'état de l'instance
    et la marmotte met le chocolat dans le papier...
    Sérieusement je suis largué là... J'ai du mal avec les constructeurs.

    Edit : pour le 15ème post je verrai plus tard. Y a plus urgent...
    Edit 2 : question bête mais je peut pas m'empêcher de la poser :
    Qu'est-ce que ça change si je met "$server = $var1;" à la place de "$this->server = $var1;" ?? Mis à part une convention cela me semble la même chose non ??
    Si tout semble bien marcher c'est que vous avez oublié quelque chose !

  17. #17
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Points : 2 351
    Points
    2 351
    Par défaut
    $server = $var1;

    va copier $var1 dans la variable $server (créée en local à la fonction)
    ce ne sera pas une variable membre de l'instance, elle ne sera pas
    accessible depuis les autres méthodes (fonctions) de la classe

    D'un point de vue des données il te faut voir une instance comme un tableau
    associatif, par exemple:

    $rect_a['largeur'] = 10;
    $rect_a['hauteur'] = 4;

    $rect_b['largeur'] = 7;
    $rect_b['hauteur'] = 6;

    si $rect_a et $rect_b ont les mêmes clés, on peut les considérer comme faisant partie d'une même famille, ici, par exemple des rectangles.

    en programmation classique ont pourrait créer un fonction surface() qui calcule
    la surface

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    function surface($rect) {
      return $rect['largeur'] * $rect['hauteur'];
    }
    echo surface($rect_a);
    echo surface($rect_b);
    en POO ça donnerait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    class Rect {
      function Rect($largeur, $hauteur) {
        $this->largeur = $largeur;
        $this->hauteur = $hauteur;
      }
      function surface() {
        return $this->largeur * $this->hauteur;
      }
    }
    $rect_a = new Rect(10, 4);
    $rect_b = new Rect(7, 6);
    echo $rect_a->surface();
    echo $rect_b->surface();
    Tu va me dire... mais c'est plus compliqué :-)

    Oui... mais... ça a des avantages. la fonction surface étant encapsulée
    dans la class Rect tu n'a plus de risque de conflit avec une autre fonction
    surface.

    Si dans un code non POO tu dois ajouter la possibilité de calculer la surface
    de triangles. comment nommera-tu ta fonction ? la fonction surface aurrait
    du s'appeler surfaceRect et la nouvelle, surfaceTriangle et c'est parti pour
    des heures de refactoring :-)

    En te basant sur un model POO, tu mets les choses au bon endroit et tu
    n'est plus confronté à ce genre de problèmes.
    Si ton code fait plus d'une ligne, c'est que tu as mal choisi ton langage !

  18. #18
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2003
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 194
    Points : 118
    Points
    118
    Par défaut
    marcha t'es un chef !
    Je comprends pas mal de choses grâce à toi, plutôt j'ai de meilleures bases pour avancer dans la POO ! Il me reste encore pas mal de chemin j'en suis sur mais ça viendra avec le temps.
    Si tout semble bien marcher c'est que vous avez oublié quelque chose !

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 13/02/2009, 09h42
  2. [Débutant] Différence entre fonction et procédure
    Par secondechance dans le forum Langage
    Réponses: 9
    Dernier message: 21/08/2008, 21h11
  3. [POO] Différence entre ORM et Active Record ?
    Par Jokaritaff dans le forum Langage
    Réponses: 6
    Dernier message: 25/05/2008, 16h10
  4. [POO] Différences entre php4 et php5
    Par etudianti4 dans le forum Langage
    Réponses: 2
    Dernier message: 30/01/2008, 18h31
  5. Différence entre macros et procédures ?
    Par noubigh dans le forum Assembleur
    Réponses: 7
    Dernier message: 11/02/2007, 00h12

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