PHPFrance

Discuter de tout ce qui touche au PHP, en français.

Vers le contenu

» Masquer les résultats de la recherche

Recherche dynamique PHPfrance

  1. Effectuez une recherche, les résultats s'afficheront dynamiquement ici.

Coder orrienter objet ...

PHP 4 n'est plus supporté depuis le 08/08/2008. Ce forum est fermé mais reste disponible pour consultation. Il est grand temps de s'intéresser à PHP 5...

Coder orrienter objet ...

Messagede dark_vidor le 07 Avr 2006, 19:24

Soit la tables suivante :
--
-- Structure de la table `planetes_biens`
--

CREATE TABLE `planetes_biens` (
  `id` smallint(3) NOT NULL default '0',
  `players` int(10) NOT NULL default '0',
  `u11` int(8) unsigned NOT NULL default '0',
  `u12` int(8) unsigned NOT NULL default '0',
  `u13` int(8) unsigned NOT NULL default '0',
  `u14` int(8) unsigned NOT NULL default '0'
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

--
-- Contenu de la table `planetes_biens`
--

INSERT INTO `planetes_biens` VALUES (1, 207, 11, 12, 13, 14);
INSERT INTO `planetes_biens` VALUES (2, 207, 21, 22, 23, 24);
INSERT INTO `planetes_biens` VALUES (3, 0, 0, 0, 0, 0);
INSERT INTO `planetes_biens` VALUES (4, 0, 0, 0, 0, 0);
INSERT INTO `planetes_biens` VALUES (5, 0, 0, 0, 0, 0);
INSERT INTO `planetes_biens` VALUES (6, 0, 0, 0, 0, 0);
INSERT INTO `planetes_biens` VALUES (7, 0, 0, 0, 0, 0);
INSERT INTO `planetes_biens` VALUES (8, 0, 0, 0, 0, 0);
INSERT INTO `planetes_biens` VALUES (9, 0, 0, 0, 0, 0);
INSERT INTO `planetes_biens` VALUES (10, 0, 0, 0, 0, 0);


Jusqu'à la rien de compliqué c'est juste la création d'un tableau dans la base de données :
Image


Bon on va essayer de recuperer le contenu de la table (u11, u12, u13, u14) pour l'id 207 ...

ça donne :
Syntaxe: [ Télécharger ] [ Masquer ]
Code php
<?
/* Configuration de la connexion BD */
$host = 'localhost';
$user = 'root';
$base = 'test';
$pass = '';

$db = mysql_connect ($host, $user, $pass);
mysql_select_db ($base,$db);

?>
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<?
/* Ce code génère et recupère des données SQL à l'aide de Variable définie avec un tableau */
$array_u = array('11', '12', '13', '14');


/* Construction de la requète */
$sql = "SELECT";
foreach($array_u as $i)
{
        $sql.=" u".$i.",";
}

$sql = substr("$sql", 0, -1)." FROM planetes_biens WHERE players = 207";

echo $sql;

/* Execution / Exploitation */
$req = mysql_query($sql);
while($data = mysql_fetch_array($req))
{
        echo "<p>";
        foreach($array_u as $i)
        {
                echo "u$i : ".$data['u'.$i]."<br>";
        }
        echo "_____</p>";
}
?>
</body>
</html>


et ça retourne :

SELECT u11, u12, u13, u14 FROM planetes_biens WHERE players = 207

u11 : 11
u12 : 12
u13 : 13
u14 : 14
_____

u11 : 21
u12 : 22
u13 : 23
u14 : 24
_____


Parce que je suis en forme ^^ le meme code avec les fonctions :

Syntaxe: [ Télécharger ] [ Masquer ]
Code php
<?

/* Configuration de la connexion BD */

$host = 'localhost';

$user = 'root';

$base = 'test';

$pass = '';



$db = mysql_connect ($host, $user, $pass);

mysql_select_db ($base,$db);

function req_sql($array, $table, $where)

{

        /*Construction de la Requète */

        $sql = "SELECT";

        foreach($array as $i)

        {

                $sql.=" u".$i.",";

        }

        return substr("$sql", 0, -1)." FROM ".$table." WHERE ".$where;

}

function data_sql($array, $data)

{

        foreach($array as $i)

        {

                echo "u$i : ".$data['u'.$i]."<br>";

        }

}

?>

<html>

<head>

<title></title>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

</head>



<body>

<?

/* Ce code génère et recupère des données SQL à l'aide de Variable définie avec un tableau */

$array_u = array('11', '12', '13', '14');



$sql = req_sql($array_u, "planetes_biens", "players = 207");

echo $sql;



/* Execution / Exploitation */

$req = mysql_query($sql);

while($data = mysql_fetch_array($req))

{

        echo "<p>";

        data_sql($array_u, $data);

        echo "_____</p>";

}

?>

</body>

</html>

Bon comment faire pour transformer tout ça en orrienter objet ?
Me parler pas technique objet parce que j'y connais que dalle :lol:

Merci a vous :wink:
dark_vidor
J'ai codé une fonction !
 
Messages: 229
Inscription: 11 Fév 2005, 22:09
Localisation: Le Mans

Publicité

Re: Coder orrienter objet ...

Messagede Cyrano le 07 Avr 2006, 21:53

dark_vidor a écrit:Me parler pas technique objet parce que j'y connais que dalle :lol:

Ben c'est pourtant par là qu'il faut passer : il faut en fait d'abord comprendre ce que c'est que la POO. Je vais schématiser très grossièrement pour simplifier en essayant d'être le moins abstrait possible.

Ce concept est basé sur la vie de tous les jours : on manipule des objets, ces objets ont des propriétés et des fonctions plus ou moins utiles. Prends un super-croiseur impérial : il a des propriétés : une flotte d'escorte, des défenses rapprochées, des hangars, un commandant, du personnel, etc... et des fonctions : faire la chasse aux rebelles, les soumettre ou les détruire, protéger l'empire, etc...

Ben en programmation, on va faire quelque chose qui n'est pas si dissemblable. Pour illustrer, au lieu de prendre ton code qui donnerait quelque chose de complexe, on va faire une bête calculette. Mon objet est donc un objet "calculette", on va lui donner deux propriétés qui seront des chiffres, et une opération qui sera la fonction, qu'au passage en POO on appelle des "méthodes" (tu pourras en ajouter d'autres ensuite, on fait basique).

Je commence donc mon code en déclarant une classe :
Syntaxe: [ Télécharger ] [ Masquer ]
Code php
<?php

class calculette

{

}

?>


On a dit qu'un objet a des propriétés : une calculette en avait deux, des chiffres qu'on va additionner, soustraire, multiplier etc..., on va déclarer ces propriétés :
Syntaxe: [ Télécharger ] [ Masquer ]
Code php
<?php

class calculette

{

    /**

     * Une propriété de ma calculette : le premier chiffre d'une opération

     *

     * @var Int

     */


    private $chiffre1;

    /**

     * Une autre propriété de ma calculette : le second chiffre d'une opération

     *

     * @var Int

     */


    private $chiffre2;

}

?>

Ensuite, l'utilisation d'un objet implique qu'il existe. Je dois donc le créer. Pour ça, j'ai besoin d'un constructeur qui va donner une valeur à ses propriétés. Pour accéder aux propriétés d'une classe à partir d'une de ces méthodes, on utilisera $this qui va indiquer la propriété de l'objet en cours. ça va donner un constructeur comme suit:
Syntaxe: [ Télécharger ] [ Masquer ]
Code php
<?php

class calculette

{

    /**

     * Une propriété de ma calculette : le premier chiffre d'une opération

     *

     * @var Int

     */


    private $chiffre1;

    /**

     * Une autre propriété de ma calculette : le second chiffre d'une opération

     *

     * @var Int

     */


    private $chiffre2;

   

    /**

     * Constructeur

     *

     * @param int $c1

     * @param int $c2

     */


    public function __construct($c1, $c2)

    {

        $this->chiffre1 = $c1;

        $this->chiffre2 = $c2;

    }

}

?>

Ça veut dire que quand j'aurai besoin de faire une opération, je vais commencer par créer une calculette et lui envoyer les valeurs des propriétés que je voudrais manipuler.

Ajoutons les opérations : on va se limiter à une seule, tu pourras ensuite ajouter les autres sur le même schéma :

Syntaxe: [ Télécharger ] [ Masquer ]
Code php
<?php

class calculette

{

    /**

     * Une propriété de ma calculette : le premier chiffre d'une opération

     *

     * @var Int

     */


    private $chiffre1;

    /**

     * Une autre propriété de ma calculette : le second chiffre d'une opération

     *

     * @var Int

     */


    private $chiffre2;



    /**

     * Constructeur

     *

     * @param int $c1

     * @param int $c2

     */


    public function __construct($c1, $c2)

    {

        $this->chiffre1 = $c1;

        $this->chiffre2 = $c2;

    }

   

    /**

     * Méthode addition

     *

     * Retourne la somme des propriétés de classe $chiffre1 + $chiffre2

     *

     * @return Int

     */


    public function addition()

    {

        return ($this->chiffre1 + $this->chiffre2);

    }

}

?>

Voilà : à ce stade, j'ai une calculette utilisable : pour l'instant, elle ne peut faire que des additions, mais libre à toi d'ajouter d'autres choses ensuite.

Pour faire une opération, je vais définir sur quels chiffres je veux faire mon opération et créer mon objet calculette. Par exemple, j'ai besoin d'additionner 295 et 4567. Je fais donc :
Syntaxe: [ Télécharger ] [ Masquer ]
Code php
<?php

$premier = 292;

$second = 4567;



/* Création de l'objet en utilisant "new" */

$operation = new calculette($premier, $second);

?>

À ce stade, ma calculette existe, mais uniquement pour ces deux valeurs.

Pour obtenir la somme, je fais appel à la méthode de classe de la manière suivante : nom_de_la_classe->nom_de_la_methode() ce qui donne en pratique :
Syntaxe: [ Télécharger ] [ Masquer ]
Code php
<?php

$premier = 292;

$second = 4567;



/* Création de l'objet en utilisant "new" */

$operation = new calculette($premier, $second);



/* On va maintenant récupérer la somme en appelant la méthode de classe addition */

$total = $operation->addition();



/* On affiche le résultat */

echo("<p>La somme de ". $premier ." + ". $second ." est égale à ". $total ."</p>\n");

?>

Voilà, c'est très sommaire bien entendu, mais ça devrait suffire comme squelette pour comprendre le principe :)

[Edit]J'oubliais un détail : le code présenté ici est en PHP5. Le constructeur en PHP5 s'appelle toujours "__construct" mais en PHP 4, il prend le nom de la classe, donc ici ça aurait été function calculette($c1, $c2) et on ne noterait pas "public", de même que pour les propriétés, on aurait pas déclaré "public" mais "var"[/Edit]
Dernière édition par Cyrano le 31 Mai 2008, 00:19, édité 1 fois.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:
Avatar de l’utilisateur
Cyrano
Ganesha
 
Messages: 18039
Inscription: 07 Fév 2005, 15:27
Localisation: Paris XIII

Messagede dark_vidor le 07 Avr 2006, 22:29

j'ai tout compris le comment ça marche (ou presque :D)

si je veux rajouter une fonction soustraction par exemple :
dans la class :
Syntaxe: [ Télécharger ] [ Masquer ]
Code php
    public function soustraction()

    {

        return ($this->chiffre1 - $this->chiffre2);

    }

et pour recup le total :
Syntaxe: [ Télécharger ] [ Masquer ]
Code php
$total = $operation->soustraction();



mais la pour mon petit bout de code qui genere une requete sql qu'elle est l'interet de coder en POO ? parce que la moi ma petite fonction de creation elle fonctionne si je la passe en POO ça va apporter quoi de plus (ou de moins) ?
dark_vidor
J'ai codé une fonction !
 
Messages: 229
Inscription: 11 Fév 2005, 22:09
Localisation: Le Mans

Messagede Cyrano le 07 Avr 2006, 22:48

Disons que la POO augmente la portabilité du code : tu crées des classes de façon générique et tu peux les réutiliser dans d'autres applications éventuellement sans devoir tout ré-écrire.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:
Avatar de l’utilisateur
Cyrano
Ganesha
 
Messages: 18039
Inscription: 07 Fév 2005, 15:27
Localisation: Paris XIII

Messagede tomypunk le 07 Avr 2006, 22:57

Cyrano a écrit:Disons que la POO augmente la portabilité du code : tu crées des classes de façon générique et tu peux les réutiliser dans d'autres applications éventuellement sans devoir tout ré-écrire.


ça ça marche que si tu c'est programmer correctement en POO parce que ça va vite de tout mélanger, faire du procédural dans de l'objet ça va très vite ...
Voir mes projets sur mon BLOG
tomypunk
Ma première boucle
 
Messages: 101
Inscription: 20 Avr 2005, 21:15
Localisation: Rennes

Messagede Cyrano le 07 Avr 2006, 23:01

C'est toute la difficulté de programmer de façon générique sans entrer dans certains détails : les détails, on les mettra dans des classes étendues spécifiques à une application particulière.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:
Avatar de l’utilisateur
Cyrano
Ganesha
 
Messages: 18039
Inscription: 07 Fév 2005, 15:27
Localisation: Paris XIII

Messagede dark_vidor le 07 Avr 2006, 23:02

comme les fonctions ? sauf qu'une classe peut regrouper plusieurs fonctions c'est ça ? (ya besoin des globals ou pas?)

edit : vous aller trop vite le temps que je post ce message vous en reposter 2 :lol:
dark_vidor
J'ai codé une fonction !
 
Messages: 229
Inscription: 11 Fév 2005, 22:09
Localisation: Le Mans

Messagede dark_vidor le 07 Avr 2006, 23:20

bon je testerai de code mes deux petites fonctions dans une classe... :wink:
dark_vidor
J'ai codé une fonction !
 
Messages: 229
Inscription: 11 Fév 2005, 22:09
Localisation: Le Mans

Messagede Cyrano le 08 Avr 2006, 00:11

La plus grande difficulté, ce sera de "conceptualiser" l'objet, après, ça ira tout seul :)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:
Avatar de l’utilisateur
Cyrano
Ganesha
 
Messages: 18039
Inscription: 07 Fév 2005, 15:27
Localisation: Paris XIII

Messagede dark_vidor le 08 Avr 2006, 00:37

rien que ça ça me fait peur :lol:
dark_vidor
J'ai codé une fonction !
 
Messages: 229
Inscription: 11 Fév 2005, 22:09
Localisation: Le Mans


Retourner vers PHP 4 (deprecated)

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 3 invités

  • Publicité