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 :

Passer de PHP a POO [PHP 5.0]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 429
    Par défaut Passer de PHP a POO
    Bonjour a tout le monde, avant toutes choses, meilleurs voeux a vous tous que cette année soit riche en code et en prise de tête liée aux virgules

    Alors voila j'essaie d'apprendre la programmation orienté objet je suis plusieurs tutoriels programmation POO la dessus notamment ceux de dev.com.
    J'ai déjà fais tout un projet en PHP et souhaiterais le réécrire en POO mais j'avoue ne pas bien comprendre comment faire j'essaie de faire plusieurs exo mais ma foi, le déclic n'a toujours pas lieu

    Par exemple ce bout de code :
    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
    31
    32
    33
    <?php
     
    //message d'erreur si l'acces n'est pas autorisé
    if (isset($_GET['accesrefu'])){
    echo '<script language="Javascript"> alert ("'.htmlentities(urldecode($_GET['accesrefu'])).'" ) </script>';
    }
     
    //Connexion a la base de donnée
    connectMaBase();
     
    // on crée la requête SQL 
    $sql = 'SELECT * FROM technicien'; 
     
    // on envoie la requête 
    $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); 
     
    ?>
     
     
    <form method="post" name="nom_acc2" action="log_tech.php">
    <?php
     
    // on fait une boucle qui va faire un tour pour chaque enregistrement 
    while($data = mysql_fetch_array($req)) 
        { 
        // on affiche les informations de l'enregistrement en cours 
    echo '<input type="submit" class="btn btn-default btn-lg btn-block" name="nom_acc" value="'.$data['Nom'].'" >';
    	}
    // on ferme la connexion à mysql 
    mysql_close(); 
     
    ?>
    </form>
    Comment faire pour le transformer en objet je ne vois pas du tout comment procéder ni par ou commencer ..
    Si quelqu'un a un lien avec des exercices qui se rapprocheraient plus de ce type de code plutôt de que créer des personnages je suis preneuse ..
    Merci de votre lecture et de votre patiente
    CDLT

  2. #2
    Membre expérimenté Avatar de stephanegib2
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2011
    Messages : 152
    Par défaut
    Ceci est un exemple parmis d'autres

    gestion de la base
    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
     
    <?php
    class MaBase
    {
     
    public function __construct()
    {
    $this->connect();
    }
     
    /**
    * connexion a la base de donnée
    **/
    public function connect()
    {
    // code de connexion
    }
     
    /**
    * fermeture de la connexion à la base de donnée
    **/
    public function stopConnect()
    {
    // code de fermeture de connexion
    }
     
    }
    ?>
    gestion des techniciens

    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
     
    <?php
    class Technicien
    {
     
    /**
    * Sélectionnes des techniciens par id
    * @param array $id tableau d'id
    **/
    public function doSelectById(Array $id)
    {
    // code du select
    }
     
    /**
    * Sélectionnes des techniciens
    * @return array liste de technicien
    **/
    public function doSelect()
    {
    // code du select
    }
     
    public function doUpdate()
    {
    // code update
    }
     
    }
    ?>
    gestion des requetes http

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    <?php
    class Request
    {
     
    private $parameters = array();
     
    public function __construct()
    {
    // code qui récupère toutes les informations sur la requêtes
    $this->getParameters();
    }
     
    /**
    * Récupere tous les paramètres passés en GET 
    **/
    private function getParameters()
    {
    foreach ($_GET as $key=> $value) 
    {   
    if (!empty($value)) 
    {
    $this->parameters[$key] = htmlentities(urldecode($value));
    }
    }
    }
     
    /**
    * Retourne un paramètre
    * @param string $key nom du paramètre
    * @return string
    **/
    public function getParameter($key)
    {
    return (in_array($key, $this->parameters)) ? $this->parameters[$key] : null;
    }
     
    /**
    * Retourne un paramètre
    * @param string $key nom du paramètre
    * @return string
    **/
    public function hasParameter($key)
    {
    return (in_array($key, $this->parameters));
    }
     
    }
    ?>

    fichier index

    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
     
    <?php
    $request = new Request();
     
    if $request->hasParameter('accesrefu')
      echo '<script language="Javascript"> alert ("'.$request->getParameter('accesrefu').'" ) </script>';
     
    $base = new MaBase();
    $technicien = new technicien();
    $technicienList = $technicien->doSelect();
     
    ?>
    <form method="post" name="nom_acc2" action="log_tech.php">
    <?php
     
    // on fait une boucle qui va faire un tour pour chaque enregistrement 
    foreach ($technicienList  as $onetechnicien)
        { 
        // on affiche les informations de l'enregistrement en cours 
    echo '<input type="submit" class="btn btn-default btn-lg btn-block" name="nom_acc" value="'.$onetechnicien->getNom().'" >';
    	}
    // on ferme la connexion à mysql 
    $base->stopConnect(); 
     
    ?>
    </form>

  3. #3
    Membre éclairé
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 429
    Par défaut
    Merci pour cette réponse rapide !!
    Donc tout ce qui est bouton et code html on n'y touche pas ?

    Les requêtes et les conditions deviennent des méthodes ?

  4. #4
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 495
    Billets dans le blog
    1
    Par défaut
    Si je n'ai pas de lien pour des exercices à fournir, je vois que pour l'accès à MySQL, tu utilises les fonctions _mysql ; intéresse-toi à la classe PDO : c'est un moyen d'accéder à MySQL en POO : comprendre PDO.

    Et voici un code de connexion avec PDO :

    MyPdo.php :
    Code php : 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
    <?php
     //la classe MyPdo hérite de la classe PDO (extends)
    class MyPdo extends PDO {
    /* on privilégie les var de classe (statiques) aux constantes : ainsi modifiables par programme */
    	static public $DB_NAME = "---";
    	static public $HOST = "---";
    	static public $USER = "---";
    	static public $PASS = "---";
     
     
     
    // le constructeur de MyPdo appelle le constructeur de PDO en lui passant ses paramètres	
    	function __construct() {
    	$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
    	$pdo_options[PDO::ATTR_EMULATE_PREPARES] = false;//important sur les configs récentes
    	$pdo_options[PDO::ATTR_DEFAULT_FETCH_MODE] = PDO::FETCH_OBJ;//pour le mode objet
    	$pdo_options[PDO::MYSQL_ATTR_INIT_COMMAND] = "SET NAMES utf8";//pour l'utf-8
     
    	parent::__construct('mysql:host=' . MyPdo::$HOST . ';dbname=' . MyPdo::$DB_NAME, MyPdo::$USER, MyPdo::$PASS, $pdo_options);
    	}
     
    }
    ?>

    code principal :
    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
    		<?php
    		include 'MyPdo.php';
     
    			try{
    				$bdd = new MyPdo();
                                                       ...	
     
     
     
    				//efface la variable (pour se déconnecter)
    				$bdd = NULL;
     
    				}
     
    			catch(PDOException $e) {
        echo 'ERREUR PDO dans ' . $e->getFile() . ' L.' . $e->getLine() . ' : ' . $e->getMessage();
    }
    		?>

  5. #5
    Membre éclairé
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 429
    Par défaut
    Seigneur dieu tout puissant ..
    Mais qu'est ce donc que cela !!
    Je vais regarder les doc sur PDO et si je ne comprend pas quelque chose je reposte
    Merci de ta reponse Laurent

  6. #6
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 495
    Billets dans le blog
    1
    Par défaut
    Je ne suis pas un expert de la POO (ce code n'est pas de moi), mais je connais suffisamment pour comprendre ce qui est fait (je connais notamment les notions de classe, propriété, méthode, constructeur/destructeur ou héritage...)


    Je te redonne le code principal avec quelques explications placées en commentaire :

    Code php : 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
    	<?php
    		include 'MyPdo.php'; /* en POO, on définit les classes (ce sont des types où les variables sont 
    nommées "propriétés" (ou "attributs") et les fonctions "méthodes"), le tout étant en général placé dans un fichier externe à includer */ 
    			try{
    				$bdd = new MyPdo();// l'instantiation de la classe MyPdo crée l'objet $bdd                                                   	
     
     
     
    				//efface la variable (pour se déconnecter)
    				$bdd = NULL; //équivalent à mysql_close() 
    				}
     
    			catch(PDOException $e) {
        echo 'ERREUR PDO dans ' . $e->getFile() . ' L.' . $e->getLine() . ' : ' . $e->getMessage();
    }
    		?>

  7. #7
    Membre éclairé
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 429
    Par défaut
    Bonjour tout le monde
    Donc tout ce qui est bouton et affichage s’écrit normalement ? C'est uniquement les requêtes etc qui s’écrivent en POO?

    Est ce que ceci est juste pour se connecter a une base de donnée ? :
    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
    <?php
    class MaBase
    {
     
    public function __construct()
    {
    $this->connect();
    }
     
    /**
    * connexion a la base de donnée
    **/
    public function connect()
    {
    connectMaBase();
    }
     
    /**
    * fermeture de la connexion à la base de donnée
    **/
    public function stopConnect()
    {
    mysql_close();
    }
     
    }
    ?>
    PS : connectMaBase() est deja une fonction ou la connexion s'établie .

    -------------------------------------

    POur ce code :
    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
    <?php
    $request = new Request();
     
    if $request->hasParameter('accesrefu')
      echo '<script language="Javascript"> alert ("'.$request->getParameter('accesrefu').'" ) </script>';
     
    $base = new MaBase();
    $technicien = new technicien();
    $technicienList = $technicien->doSelect();
     
    ?>
    <form method="post" name="nom_acc2" action="log_tech.php">
    <?php
     
    // on fait une boucle qui va faire un tour pour chaque enregistrement 
    foreach ($technicienList  as $onetechnicien)
        { 
        // on affiche les informations de l'enregistrement en cours 
    echo '<input type="submit" class="btn btn-default btn-lg btn-block" name="nom_acc" value="'.$onetechnicien->getNom().'" >';
    	}
    // on ferme la connexion à mysql 
    $base->stopConnect(); 
     
    ?>
    </form>
    Les methodes doSelect() et stopConnect(), ensuite les differentes variables et l'objet Request, où sont ils créés ? Dans un fichier nom.php a part ?
    ---------------------

    Alors voila j'ai essayer quelque chose:
    Dans mon fichiers fonctions.php j'ai rajouter :
    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    <?php
    //Connexion BDD
    public function connect()
    {
        $base = mysql_connect ('localhost', 'root', 'lcesa');  
        mysql_select_db ('lcesa', $base) ;
    }
     
    //Deconnexion BDD
    public function stopConnect()
    {
    	mysql_close();
    }
     
    // --------------------------------------Gestion des techniciens-------------------------------
     
    class Technicien
    {
    	public function doSelectById(Array $id)
    	{
    		// code select
    	}
     
    	public function doSelect()
    	{
    		$sql = 'SELECT * FROM technicien'; 
    		$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); 
    	}
     
    	public function doUpdate()
    	{
    		// code update
    	}
     
    }
     
    //----------------------------------------Gestion des requetes--------------------------
     
    class Request
    {
     
    private $parameters = array();
     
    public function __construct()
    {
    // code qui récupère toutes les informations sur la requêtes
    $this->getParameters();
    }
     
    /**
    * Récupere tous les paramètres passés en GET 
    **/
    private function getParameters()
    {
    foreach ($_GET as $key=> $value) 
    {   
    if (!empty($value)) 
    {
    $this->parameters[$key] = htmlentities(urldecode($value));
    }
    }
    }
     
    /**
    * Retourne un paramètre
    * @param string $key nom du paramètre
    * @return string
    **/
    public function getParameter($key)
    {
    return (in_array($key, $this->parameters)) ? $this->parameters[$key] : null;
    }
     
    /**
    * Retourne un paramètre
    * @param string $key nom du paramètre
    * @return string
    **/
    public function hasParameter($key)
    {
    return (in_array($key, $this->parameters));
    }
     
    }
    ?>
    Et j'ai changer mon code de index.php avec ce que stephane m'a donné en essayant tant bien que mal de comprendre :
    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
    <?php
    $request = new Request();
     
    if ($request->hasParameter('accesrefu')) {
      echo '<script language="Javascript"> alert ("'.$request->getParameter('accesrefu').'" ) </script>';
    }
     
    $base = new MaBase();
    $technicien = new technicien();
    $technicienList = $technicien->doSelect();
     
    ?>
    <form method="post" name="nom_acc2" action="log_tech.php">
    <?php
     
    // on fait une boucle qui va faire un tour pour chaque enregistrement 
    foreach ($technicienList  as $onetechnicien)
        { 
        // on affiche les informations de l'enregistrement en cours 
    echo '<input type="submit" class="btn btn-default btn-lg btn-block" name="nom_acc" value="'.$onetechnicien->getNom().'" >';
    	}
    // on ferme la connexion à mysql 
    $base->stopConnect(); 
     
    ?>
    </form>
    Mais lorsque je veux lancer le site il me met ce message d'erreur :
    Warning: Invalid argument supplied for foreach() in C:\wamp\www\LCEsa\index.php on line 32
    Voici la ligne 3 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    foreach ($technicienList  as $onetechnicien)
    Je ne comprend pas ...

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

Discussions similaires

  1. [POO] Livre sur PHP la POO et UML
    Par Sourrisseau dans le forum Livres
    Réponses: 2
    Dernier message: 11/04/2008, 19h46
  2. Réponses: 11
    Dernier message: 23/11/2007, 11h31
  3. [POO] bouquin php et poo
    Par leblaireau dans le forum Langage
    Réponses: 1
    Dernier message: 13/09/2006, 22h40
  4. Passer de PHP a Word ou PDF
    Par guillaumeIOB dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 06/09/2006, 12h26
  5. Réponses: 2
    Dernier message: 06/01/2005, 22h09

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