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
HttpRequest
permet 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
$this
fait 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.