









Nous allons commencer par exposer l'idée générale d'un objet.
Un objet est un ensemble de méthode et de propriété qui servent a définir quelques choses.
Pour nos exemples, nous allons supposer que la problématique est de créer une commande.
Pour cela, on va utiliser un objet commande qui contiendra :
En php, un objet vide ce définie comme ceci :
class produit { function produit() {} }
Pour l'instant notre objet ne fait rien.
Rajoutons les propriétés propres à un produit : id, référence, nom, description, prix
class produit { var $idx= null; var $reference= ""; var $nom= ""; var $description=""; var $prix= ""; function produit() {} }
Maintenant notre objet est utilisable. Il s'agit d'un objet sans méthode donc il ne sert que de stockage, un peu comme le ferais un array.
Pour l'utiliser on tape :
/* instancie l'objet */ $produit=new produit(); /*On attribut une valeur à une propriété */ $produit->idx = 1; $produit->nom = "produit 1"; /* Pour lire une propriété */ echo $produit->nom;
Pour voir comment php traite un objet :
print_r($produit); /*On remarque que php traite les propriété d'objet exactement comme les array */
Ce qui donne :
produit Object ( [idx] => 1 [reference] => [nom] => "produit 1" [description] => [prix] => )
L'objet client est un objet simple, au même titre que l'objet produit.
class client{ var $civilite=""; var $nom=""; var $prenom=""; var $adresse=""; var $codeP=""; var $ville=""; function client() {} }
Jusque ici, rien de compliquer.
L'objet commande est plus particulier.
En plus de ses propres méthodes et propriétés, il contient :
Commençons par créer un objet Commande qui ne contient que ses propriétés.
class commande { var $idx=null; var $date=""; var $etat=0; function commande() {} }
Maintenant, nous allons adjoindre les propriétés qui vont permettre de lier le client et les produits à notre commande.
class commande { var $idx=null; var $date=""; var $etat=0; var $client=null; // le cliens var $produits=array(); //la liste des produits var $quantite=array(); //la quantité par produit function commande() {} }
Nous allons maintenant ajouter une méthode pour insérer un produit à notre commande :
class commande { var $idx=null; var $date=""; var $etat=0; var $client=null; // le cliens var $produits=array(); //la liste des produits var $quantite=array(); //la quantité par produit function commande() {} /*Ajout d'un produit */ function addProduit($produit) { $this->produits[$produit->idx] = $produit; if (isset($this->quantite[$produit->idx]) $this->quantite[$produit->idx] += 1; else $this->quantite[$produit->idx] = 1; } }
Que fait-on ici ?
En 1er lieu, on ajoute l'objet de type “produit” à notre liste de produit.
Ensuite on regarde si, pour ce produit, il y a déjà une quantité de définie.
Si oui, on ajoute 1
Sinon, on met la quantité à 1.
Nous disposons maintenant de nos 3 objets.
Nous allons donc effectuer un test, pour vérifier si tous fonctionne.
Nous allons instancier 4 objets : 1 “client”, 2 “produit” et 1 “commande”
$objProduit=new produit(); $objProduit->idx=1; $objProduit->prix="100"; $objProduit2=new produit(); $objProduit2->idx=2; $objProduit2->prix="50.89"; $objClient= new client(); $objClient->civilite="Mr"; $objClient->nom="Dupont"; $objClient->prenom="Jean"; $objCommande= new commande(); $objCommande->idx=1; $objCommande->date=date ('Y-m-d'); //...
Nous allons ajouter à notre commande le client et les produits :
//... /*Ajoute l'objet client à notre commande*/ $objCommande->client=$objClient; /* Ajoute notre 1er produit */ $objCommande->addProduit($produit); /* Puis on ajoute le produit2 (avec une quantité de 3)*/ $objCommande->addProduit($produit2); $objCommande->addProduit($produit2); $objCommande->addProduit($produit2);
Afin de vérifier ajoutez ce code :
echo '<pre>'.print_r($objCommande,true).'</pre>';
on obtient :
commande Object ( [client] => client Object ( [civilite] => Mr [nom] => Dupont [prenom] => Jean [adresse] => [codeP] => [ville] => ) [produits] => Array ( [1] => produit Object ( [idx] => 1 [reference] => [nom] => [description] => [prix] => 100 ) [2] => produit Object ( [idx] => 2 [reference] => [nom] => [description] => [prix] => 50.89 ) ) [quantite] => Array ( [1] => 1 [2] => 3 ) [idx] => 1 [date] => 2007-03-05 )
Grâce à serialize et unserialize, vous pouvez sauver vos objets dans l'état exact où ils se trouvent, et les restaurer par la suite.
$v = serialize($objCommande); echo $v;
Résultat :
O:8:"commande":7:{s:6:"client";O:6:"client":6:{s:8:"civilite";s:2:"Mr";s:3:"nom";s:6:"Dupont";s:6:"prenom";s:4:"Jean";s:7:"adresse";s:0:"";s:5:"codeP";s:0:"";s:5:"ville";s:0:"";}s:8:"produits";a:2:{i:1;O:7:"produit":9:{s:3:"idx";i:1;s:11:"idCategorie";N;s:9:"reference";s:0:"";s:3:"nom";s:0:"";s:11:"description";s:0:"";s:4:"prix";s:5:"100";s:5:"promo";s:0:"";s:12:"linkProduits";s:0:"";s:4:"date";s:0:"";}i:2;O:7:"produit":9:{s:3:"idx";i:2;s:11:"idCategorie";N;s:9:"reference";s:0:"";s:3:"nom";s:0:"";s:11:"description";s:0:"";s:4:"prix";s:7:"50.89";s:5:"promo";s:0:"";s:12:"linkProduits";s:0:"";s:4:"date";s:0:"";}}s:8:"quantite";a:2:{i:1;i:1;i:2;i:3;}s:3:"idx";i:1;s:4:"date";s:8:"20070305";s:10:"traitement";i:1;s:4:"bank";i:1;}
Cette chaîne représente une version texte de votre objet. C'est cette chaîne que devez sauver si vous voulez réutiliser vos objets.
Vous pouvez sauver ceci, par exemple dans un champ mysql.
Pour réutiliser un objet, faite comme ceci :
$v = serialize($objCommande); echo $v; $ds = unserialize($v); echo '<pre>'.print_r($ds,true).'</pre>';
On pourrait imaginer que la classe commande calcule aussi le prix total de la commande en fonction des produit et de la quantité.
Pour cela, il va falloir ajouter une méthode a notre objet commande :
function total() {//calcul le coût total de la commande $tota=0; foreach ($this->produits as $produit) {//cumule le prix de chaque produits (et leur quantité) $total+=(($produit->prix)*($this->quantite[$produit->idx])); } return $total; }
Maintenant à vous de jouer !!
06/03/2007 08:56 -
Discussion
bo juste pour dire que c'est $objCommande l'objet et pas objet :) (dans echo '<pre>'.print_r($commande,true).'</pre>';)
merci, je viens de rectifier cette erreur :)
Un grand merci pour ce tuto formidable, tous les autres sont mal structurés
ENCORE MERCI
je ne m'y connais pas trop en php et je souhaiterai apprendre alors quels sont les prerequis que je doit avoir
Bonjour, cet article est très intéressant techniquement mais truffé de fautes d'orthographe… ça lui retire son côté sexy…