cours 4
 Programmation objet
				en PHP
				
				
				
				
				
			 
	Pourquoi utiliser des classes et des objects?
	
		- PHP est d'abord un langage procédural
- De petits programmes peuvent s'écrire facilement sans classes ni objects
- Des programmes plus gros, deviennent vite plus
		compliqué à structurer et à maintenir
- Grouperles données liées et leur
		comportement  dans des objet aide à gérer la taille et la complexité
 
	construir  et utiliser des objets
	
$name = new ClassName(parameters);
$name->fieldName
$name->methodName(parameters);
	
$zip = new ZipArchive();
$zip->open("moviefiles.zip");
$zip->extractTo("images/");
$zip->close();
	
 
	Example d'utilisation : récupérer un fichier sur le  web
	
$req = new HttpRequest("student.php", HttpRequest::METH_GET);
$params = array("first_name" => $fname, "last_name" => $lname);
$req->addPostFields($params);
$req->send();
$http_result_code = $req->getResponseCode();   
print "$http_result_code\n";
print $req->getResponseBody();
	
		- L'objet HttpRequestpermet de récupérer un document sur le web
 
	syntaxe de la déclaration d'une classe
	
class ClassName {
	
	public $name;    
	private $name;   
	
	
	public function __construct(parameters) {
		instruction(s);
	}
	
	
	public function name(parameters) {
		instructions;
	}
}
	
		- Dans le   constructor ou dans une methode,
		utiliser $thisfait référence a l'objet courant
 
	Exemple de Classe
	
<?php
class Point {
	public $x;
	public $y;
	
	
	public function __construct($x, $y) {
		$this->x = $x;
		$this->y = $y;
	}
	
	public function distance($p) {
		$dx = $this->x - $p->x;
		$dy = $this->y - $p->y;
		return sqrt($dx * $dx + $dy * $dy);
	}
	
	
	public function __toString() {
		return "(" . $this->x . ", " . $this->y . ")";
	}
}
?>
 
	Exemple d'utilisation de classe
	
		
<?php
include("Point.php");
$p1 = new Point(0, 0);
$p2 = new Point(4, 3);
print "La distance entre $p1 et $p2 est " . $p1->distance($p2) . "\n\n";
var_dump($p2);   
?>
		
La distance entre  (0, 0) et (4, 3) est 5
object(Point)[2]
  public 'x' => int 4
  public 'y' => int 3
	 
	
 
	
	
class ClassName extends ClassName {
	...
}
	
class Point3D extends Point {
	public $z;
	
	public function __construct($x, $y, $z) {
		parent::__construct($x, $y);
		$this->z = $z;
	}
	
	...
}
	
		- La classe va heriter toute les donnée et les
		methode de ClassName
 
	Static 
	
static $name = value;    
const $name = value;     
	
public static function name(parameters) {
	instructions;
}
	
ClassName::methodName(parameters);  
self::methodName(parameters);       
	
		- 
			 champs et méthodes static sont partagé a
			 travers la classe et non repliqué dans chaque
			 objet 
		
 
	
	
interface InterfaceName {
	public function name(parameters);
	public function name(parameters);
	...
}
class ClassName implements InterfaceName { ...
				
abstract class ClassName {
	abstract public function name(parameters);
	...
}
	
		- 
			Les interfaces sont
			des  "supertypes" qui  specifient/déclarent
			les  methodes sans implementations
			
				- 
                                      ne peuvent etre instanciées ; ne
					peuvent contenir de le corps
					d'une fonction ou des champs
				
				
- 
                                       permette le polymorphisme entre
					"sous-type" sans partage de
					l'implementation du code.
				
				
 
- 
			Les classes
			abstraite  sont comme les interfaces,
			mais  contenir de le corps
					d'une fonction ou des champs
			
				- 
bien que ne puissant être instancié permettre le polymorphisme avec
	partage de code.