19
PHP OBJET

Php OBJet, Introduction à xml - deptinfo.unice.frdeptinfo.unice.fr/.../cours/seance06/cours05-Objets.pdf · Université Nice Sophia Antipolis L3I parcours Miage – Web – Philippe

Embed Size (px)

Citation preview

Page 1: Php OBJet, Introduction à xml - deptinfo.unice.frdeptinfo.unice.fr/.../cours/seance06/cours05-Objets.pdf · Université Nice Sophia Antipolis L3I parcours Miage – Web – Philippe

PHP OBJET

Page 2: Php OBJet, Introduction à xml - deptinfo.unice.frdeptinfo.unice.fr/.../cours/seance06/cours05-Objets.pdf · Université Nice Sophia Antipolis L3I parcours Miage – Web – Philippe

L3I parcours Miage – Web – Philippe Renevier Gonin 2 / 19 Université Nice Sophia Antipolis

PHP ORIENTÉ OBJET

class Moyenne { // bloc de déclaration de classe

/** Somme des notes obtenues */

private $notes = 0 ;

/** Nombre de notes obtenues */

private $nombreDeNotes = 0 ;

/**

* Ajoute une note à la moyenne

* @param note nouvelle note obtenue

*/

function ajouteNote ($note) {

$this->notes += $note;

$this->nombreDeNotes += 1;

}

/**

* @return moyenne des notes

*/

function calculMoyenne() {

if ($this->nombreDeNotes > 0)

return $this->notes / $this->nombreDeNotes ;

else return 0;

}

}

Déclaration de la classe

pas nécessairement dans un fichier du

même nom

Déclaration de champs de classe

private / protected / public

Déclaration de méthode

private / protected / public

signature = nom de la méthode !

Toute référence à l’instance doit se

faire avec $this

Sinon, c’est une variable locale

Commentaire exploitable par l’IDE ou

Pour la génération de doc.

Page 3: Php OBJet, Introduction à xml - deptinfo.unice.frdeptinfo.unice.fr/.../cours/seance06/cours05-Objets.pdf · Université Nice Sophia Antipolis L3I parcours Miage – Web – Philippe

L3I parcours Miage – Web – Philippe Renevier Gonin 3 / 19 Université Nice Sophia Antipolis

AUTRE EXEMPLE class Panier {

/**

* prix moyen d’un élément du panier

* @var Moyenne

*/

private $moyenne;

// Eléments de notre panier private $items;

// [….] // code coupé, comme le constructeur…

/**

* Ajout de $num articles de type $artnr au panier

* au prix unitaire $prix

* @param $artnr, numéro de l’article – codebarre (int)

* @param $num, le nb de fois que l'article est ajouté

* @param $prix, le prix d'un article

*/ function add_item ($artnr, $num, $prix) { $this->items[$artnr] += $num;

for($i=0; $i< $num; $i++)

$this->moyenne->ajouteNote($prix) ; }

} }

Commentaire exploitable par l’IDE ou

Pour la génération de doc.

Variable locale à la méthode

Page 4: Php OBJet, Introduction à xml - deptinfo.unice.frdeptinfo.unice.fr/.../cours/seance06/cours05-Objets.pdf · Université Nice Sophia Antipolis L3I parcours Miage – Web – Philippe

L3I parcours Miage – Web – Philippe Renevier Gonin 4 / 19 Université Nice Sophia Antipolis

EXEMPLE DE GÉNÉRATION D’API : PHPDOC

http://phpdoc.org/

http://deptinfo.unice.fr/~renevier/exemplesPhp/IHM-

2012/DOC_IHM/

Basé sur des annotations

Utilisable en ligne de commande ou en ligne

Page 5: Php OBJet, Introduction à xml - deptinfo.unice.frdeptinfo.unice.fr/.../cours/seance06/cours05-Objets.pdf · Université Nice Sophia Antipolis L3I parcours Miage – Web – Philippe

L3I parcours Miage – Web – Philippe Renevier Gonin 5 / 19 Université Nice Sophia Antipolis

INITIALISATION ET CRÉATION Initialisation

Pour PHP 5 : utilisez les constructeurs pour les initialisations variables

function magique __construct

Ou function au nom de la classe

Création

$panier = new Panier();

Le constructeur est la fonction qui est appelée automatiquement par la classe lorsque vous créez une nouvelle instance d'une classe a l'aide de l'opérateur new.

Un seul constructeur (nombre de paramètre non discriminant)

Le nom de la classe peut être dans une variable : $panier = new $nomClasse();

Accès aux membres d’une classe

$panier->add_item("diplome", 1, 180); $panier->add_item("semestre 5", 1, 30); print_r($panier ->items);

Page 6: Php OBJet, Introduction à xml - deptinfo.unice.frdeptinfo.unice.fr/.../cours/seance06/cours05-Objets.pdf · Université Nice Sophia Antipolis L3I parcours Miage – Web – Philippe

L3I parcours Miage – Web – Philippe Renevier Gonin 6 / 19 Université Nice Sophia Antipolis

QUELQUES MOTS-CLEFS $this

Objet « courant »

La pseudo-variable $this n'est pas toujours définie ( isset($this) )

Appel statique possiblement implicite (mais avec warning E_STRICT)

extends

Une classe ne peut hériter que d'une seule autre classe

implements

Une classe peut implémenter plusieurs interfaces

::

faire référence aux fonctions et variables d'une classe de base, ou bien d'utiliser des méthodes de classes qui n'ont pas encore d'objets créés (static)

self

référence (statique) à la classe courante

Utilisation avec ::

parent

représente votre classe de base (celle indiqué par extends, dans la déclaration de votre classe)

Utilisation avec ::

__toString( ) : pour conversion en chaine de caractère (return)

Page 7: Php OBJet, Introduction à xml - deptinfo.unice.frdeptinfo.unice.fr/.../cours/seance06/cours05-Objets.pdf · Université Nice Sophia Antipolis L3I parcours Miage – Web – Philippe

L3I parcours Miage – Web – Philippe Renevier Gonin 7 / 19 Université Nice Sophia Antipolis

HÉRITAGE ET CONSTRUCTEUR(S) fonction __construct ou function avec nom de classe

<?php

class LecteurTable {

public function __construct($s="euterpe.unice.fr", $l="visiteur", $p="toctoc", $bd="ihm") {

// …

}

}

class UserManagement extends LecteurTable {

public function UserManagement( ) {

// appel au constructeur « parent » est laissé à la responsabilité du développeur

// i.e. : il faut l’appeler explicitement

parent::__construct(); // appel au constructeur de la classe parent

// ….

}

}

?>

Page 8: Php OBJet, Introduction à xml - deptinfo.unice.frdeptinfo.unice.fr/.../cours/seance06/cours05-Objets.pdf · Université Nice Sophia Antipolis L3I parcours Miage – Web – Philippe

L3I parcours Miage – Web – Philippe Renevier Gonin 8 / 19 Université Nice Sophia Antipolis

STATIC Elements (champs ou méthodes) commun à toutes les instances de la classe

Accessibles sans instance, public si rien n’est précisé

Accès via <nom de classe>::$<nom de champ> ou <nom de classe>:: <methode>( )

<?php

class Bandeau {

public static $map = array(

array("index.php", "connexion"),

array("date.php", "manipulation de dates")

);

}

echo "<a href='".Bandeau::$map[0][0]."'>='".Bandeau::$map[0][1]. " </a>" ;

?>

=> <a href=' index.php' >connexion</a>

Page 9: Php OBJet, Introduction à xml - deptinfo.unice.frdeptinfo.unice.fr/.../cours/seance06/cours05-Objets.pdf · Université Nice Sophia Antipolis L3I parcours Miage – Web – Philippe

L3I parcours Miage – Web – Philippe Renevier Gonin 9 / 19 Université Nice Sophia Antipolis

CONST

DÉFINITION DE CONSTANTE DE CLASSE

Pas d’utilisation du $

Possible pour les classes abstraites et interfaces

Valeur constante, y compris à la déclaration

La valeur ne peut pas être un mot-clef de php class MyClass

{ const constant = 'constant value'; function showConstant() { echo self::constant . "\n"; } }

$variable = MyClass::constant

Page 10: Php OBJet, Introduction à xml - deptinfo.unice.frdeptinfo.unice.fr/.../cours/seance06/cours05-Objets.pdf · Université Nice Sophia Antipolis L3I parcours Miage – Web – Philippe

L3I parcours Miage – Web – Philippe Renevier Gonin 10 / 19 Université Nice Sophia Antipolis

TYPES : LES CHAÎNES DE CARACTÈRES Traitement des variables dans les chaînes : cas des tableaux et des objets

<?php // Ces exemples sont spécifiques à l'utilisation de tableaux dans une chaîne Lorsque vous êtes hors d'une chaîne,

// utilisez toujours des guillemets autour des index de tableau, et n'utilisez pas d'{accolades}. // Affichons toutes les erreurs error_reporting(E_ALL); $fruits = array('fraise' => 'rouge', 'banane' => 'jaune'); // Fonctionne mais notez que cela fonctionne pas comme si cela était hors d'une chaîne echo "Une banane est $fruits[banane]."; // Fonctionne echo "Une banane est {$fruits['banane']}."; // Fonctionne mais PHP cherche une constante appelée banane tel que décrit ci-dessous echo "Une banane est {$fruits[banane]}."; // Ne fonctionne pas, il manque les accolades. Cela donne une erreur d'analyse echo "Une banane est $fruits['banane']."; // Fonctionne echo "Une banane est " . $fruits['banane'] . "."; // Fonctionne echo "Ce carré a un coté de $square->width mètres de large."; // Ne fonctionne pas. width00 pourrait être un champ. echo "Ce carré a un coté de $square->width00 centimètres.";

// Fonctionne echo "Ce carré a un coté de {$square->width}00 centimètres.";

?>

Page 11: Php OBJet, Introduction à xml - deptinfo.unice.frdeptinfo.unice.fr/.../cours/seance06/cours05-Objets.pdf · Université Nice Sophia Antipolis L3I parcours Miage – Web – Philippe

L3I parcours Miage – Web – Philippe Renevier Gonin 11 / 19 Université Nice Sophia Antipolis

FONCTIONS LIÉES AUX OBJETS is_a -- Retourne TRUE si un objet a pour parent une classe donnée

class_exists -- Vérifie qu'une classe a été définie

method_exists -- Vérifie que la méthode existe pour une classe

De l’introspection… get_class_methods -- Retourne les noms des méthodes d'une classe

get_class_vars -- Retourne les valeurs par défaut des propriétés d'une classe

get_class -- Retourne la classe d'un objet

get_declared_classes -- Liste toutes les classes définies

get_declared_interfaces -- Retourne un tableau avec toutes les interfaces déclarées

get_object_vars -- Retourne un tableau associatif des propriétés d'un objet

get_parent_class -- Retourne le nom de la classe d'un objet

is_subclass_of -- Détermine si un objet est une sous-classe

interface_exists -- Vérifie si une interface a été définieun objet ou une classe a une propriété

Page 12: Php OBJet, Introduction à xml - deptinfo.unice.frdeptinfo.unice.fr/.../cours/seance06/cours05-Objets.pdf · Université Nice Sophia Antipolis L3I parcours Miage – Web – Philippe

L3I parcours Miage – Web – Philippe Renevier Gonin 12 / 19 Université Nice Sophia Antipolis

TYPAGE DE PARAMÈTRE DANS LES FONCTIONS

Possible avec des interfaces ou des classes (ou array)

Exemple :

http://deptinfo.unice.fr/~renevier/calendrier/index2.php

Une interface :

<?php

interface CaseGenerateur {

public function genereCase(Calendrier $cal);

public function initialiseCases($auj) ; }

?>

Une classe : Calendrier…

Page 13: Php OBJet, Introduction à xml - deptinfo.unice.frdeptinfo.unice.fr/.../cours/seance06/cours05-Objets.pdf · Université Nice Sophia Antipolis L3I parcours Miage – Web – Philippe

L3I parcours Miage – Web – Philippe Renevier Gonin 13 / 19 Université Nice Sophia Antipolis

ENCAPSULATION PAR DES CLASSES Calendrier

Délégation d’une fonctionnalité à une autre classe

Définition d’un type CaseGenerateur

Utilisation à travers deux méthodes + association à l’initialisation

Remplacement de l’objet instance de CaseGenerateur transparent pour le calendrier (c.f. paramètre dans l’URL)

Chat

Définition d’une classe avec des méthodes pour intégration

importStyle, importScript : pour les entêtes

setIds : pour paramétrer l’intégration dans la page

clearChat, postToChat : pour “alimenter” (écrire)

generateViewChat, generateFormChat, defaultGeneratation : pour générer la discussion

Utilisation « externe de la classe » pour une intégration facilité :

include "<chemin/>chat.inc";

$chat = new MyChat("<chemin/>chat.xml");

$chat->setIds("chat", "chat_input");

$chat->postToChat(); // pour recevoir les messages

// […]

// plus loin dans le corps du document

echo $chat->defaultGeneratation();

Création d’une « façade » : on utilise selon un modèle, l’implémentation nous est inconnu

Page 14: Php OBJet, Introduction à xml - deptinfo.unice.frdeptinfo.unice.fr/.../cours/seance06/cours05-Objets.pdf · Université Nice Sophia Antipolis L3I parcours Miage – Web – Philippe

L3I parcours Miage – Web – Philippe Renevier Gonin 14 / 19 Université Nice Sophia Antipolis

CHARGEMENT DYNAMIQUE

Nécessaire en cas de désérialisation (session)

function __autoload($class_name) {

include $class_name . '.inc'; // ou php

// ou autre chemin, ou plus de cas…

}

Exemple « complexe » :

http://deptinfo.unice.fr/~renevier/exemplesPhp/IHM-2012/includes/autoload.inc.txt

Page 15: Php OBJet, Introduction à xml - deptinfo.unice.frdeptinfo.unice.fr/.../cours/seance06/cours05-Objets.pdf · Université Nice Sophia Antipolis L3I parcours Miage – Web – Philippe

L3I parcours Miage – Web – Philippe Renevier Gonin 15 / 19 Université Nice Sophia Antipolis

GÉNÉRATION D’UN CODE DE CRÉATION

D’UN OBJET OU D’UN TABLEAU

Sous forme d’un code php : var_export($var, true)

Permet d’écrire le code php permettant d’initialiser $var.

on peut « écrire » du php : $code = "\$var = ". var_export($var, true);

Pour les classes, il faut implémenter public static function __set_state($an_array)

$an_array sera un tableau associatif, où les clefs sont les nom des champs de la classe et les valeurs sont les valeurs des ses champs.

Page 16: Php OBJet, Introduction à xml - deptinfo.unice.frdeptinfo.unice.fr/.../cours/seance06/cours05-Objets.pdf · Université Nice Sophia Antipolis L3I parcours Miage – Web – Philippe

L3I parcours Miage – Web – Philippe Renevier Gonin 16 / 19 Université Nice Sophia Antipolis

EXEMPLE : GÉNÉRATION DES RÉPONSES À UNE

REQUÊTE

Recherche par mots clefs

Indexation dans un tableau associatif

Modification de ce tableau => sauvegarder la nouvelle version (c’est du code)

Ex http://deptinfo.unice.fr/~renevier/exemplesPhp/articles/ (“mot de passe”)

Quand on voit un article, on peut ajouter des mots-clefs

Utilise alors http://deptinfo.unice.fr/~renevier/exemplesPhp/articles/inclusion/motcle.inc.txt

Qui écrit dans http://deptinfo.unice.fr/~renevier/exemplesPhp/articles/inclusion/motscles/indexation.inc.txt

Exploité avec http://deptinfo.unice.fr/~renevier/exemplesPhp/articles/inclusion/motscles/affichageRecherche.inc.txt

Page 17: Php OBJet, Introduction à xml - deptinfo.unice.frdeptinfo.unice.fr/.../cours/seance06/cours05-Objets.pdf · Université Nice Sophia Antipolis L3I parcours Miage – Web – Philippe

L3I parcours Miage – Web – Philippe Renevier Gonin 17 / 19 Université Nice Sophia Antipolis

__SET_STATE, EXEMPLE <?php

class Nouvelle {

private $categorie = "";

private $fichier = "";

private $nouveau = false;

/**

* construction a partir d'un chemin complet

* @param string $cheminComplet de type "news/monde/01.news"

*/

public function Nouvelle($cheminComplet = "") {

// […]

}

/**

* methode pour recreer un objet a partir des valeurs des champs de class

* appellee automatiquement par php, c'est une methode "magique"

* @param array $champsDeClasse de type array( "categorie" => "monde", "fichier" => "01.news")

*/

public static function __set_state($champsDeClasse) {

$objet = new Nouvelle();

$objet->categorie = $champsDeClasse['categorie'];

$objet->fichier = $champsDeClasse['fichier'];

// on pourrait faire autrement, on gerant le changement de status a l'exterieur de la classe

$objet->nouveau = false;

return $objet;

}

// […]

} ?>

Page 18: Php OBJet, Introduction à xml - deptinfo.unice.frdeptinfo.unice.fr/.../cours/seance06/cours05-Objets.pdf · Université Nice Sophia Antipolis L3I parcours Miage – Web – Philippe

L3I parcours Miage – Web – Philippe Renevier Gonin 18 / 19 Université Nice Sophia Antipolis

PERSISTANCE D’UN OBJET: SÉRIALISATION

Sous forme d’un binaire (presque string)

C.f. fichier temporaire de session (fichier temporaire)

http://deptinfo.unice.fr/~renevier/exemplesPhp/ser/

string serialize ( mixed $value )

accepte tous les types sauf les ressources

références cycliques dans des tableaux/objets stockées

Pour un Objet (qui n’est pas Serializable) appel à __sleep() exécutée avant toute linéarisation

retourner un tableau avec les noms de toutes les champs qui doivent être linéarisés (mais pas des champs privés de classes parentes)

mixed unserialize ( string $str )

function inversed de serialize

Pour un Objet (qui n’est pas Serializable) appel à __wakeup() Permet de restaurer des ressources

Page 19: Php OBJet, Introduction à xml - deptinfo.unice.frdeptinfo.unice.fr/.../cours/seance06/cours05-Objets.pdf · Université Nice Sophia Antipolis L3I parcours Miage – Web – Philippe

L3I parcours Miage – Web – Philippe Renevier Gonin 19 / 19 Université Nice Sophia Antipolis

INTERFACE LOGICIELLE “SERIALIZABLE”

Interface permettant de personnaliser la linéarisation.

Inibation des méthodes __sleep et __wakeup

Serializable {

/* Méthodes */

abstract public string serialize ( void )

abstract public void unserialize ( string $serialized )

}

Les méthodes font appel aux fonctions serialize et unserialize