Table des matières
Niveau
..........
En rapport...

Initiation à l'utilisation des objets en php

Par convention, les fonctions se trouvant dans un objet s'appelle des méthodes
Et les variables globales d'un objet s'appelle des propriétés.

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 :

Notation de base

En php, un objet vide ce définie comme ceci :

php
class produit {
    function produit() {}
}
On remarque la présence d'une méthode vide qui porte le même nom que l'objet.
Cette méthode est considérée comme constructeur de l'objet par php.
Lors d'une instanciation de l'objet c'est cette méthode qui sera appelée automatiquement.

Pour l'instant notre objet ne fait rien.

1er objet, l'objet produit

Rajoutons les propriétés propres à un produit : id, référence, nom, description, prix

php
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 :

php
	/* 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 :

php
	print_r($produit);
	/*On remarque que php traite les propriété d'objet exactement comme les array */

Ce qui donne :

php
produit Object ( 
	[idx] => 1
	[reference] => 
	[nom] => "produit 1"
	[description] => 
	[prix] =>
)

L'objet client

L'objet client est un objet simple, au même titre que l'objet produit.

php
class client{
	var $civilite="";
	var $nom="";
	var $prenom="";
	var $adresse="";
	var $codeP="";
	var $ville="";
	function client() {}
}

Jusque ici, rien de compliquer.

L'objet Commande

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.

php
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.

php
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 :

php
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.

Petit test

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”

php
	$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 :

php
	//...
	/*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 :

php
	echo '<pre>'.print_r($objCommande,true).'</pre>';

on obtient :

php
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
)

Sauvegarder un objet

Grâce à serialize et unserialize, vous pouvez sauver vos objets dans l'état exact où ils se trouvent, et les restaurer par la suite.

php
$v = serialize($objCommande);
echo $v;

Résultat :

php
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 :

php
$v = serialize($objCommande);
echo $v;
$ds = unserialize($v);
echo '<pre>'.print_r($ds,true).'</pre>';

Pour aller plus loin

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 :

php
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 -

iDo –