Introduction à PHP. Programmation objet. 15 mars 2015. IUT de Fontainebleau. Classes Héritage Interface Objet avancé Accès bases de données avec PDO



Documents pareils
PDO : PHP Data Object 1/13

PHP. Bertrand Estellon. 26 avril Aix-Marseille Université. Bertrand Estellon (AMU) PHP 26 avril / 214

BTS S.I.O PHP OBJET. Module SLAM4. Nom du fichier : PHPRévisionObjetV2.odt Auteur : Pierre Barais

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

La programmation orientée objet Gestion de Connexions HTTP Manipulation de fichiers Transmission des données PHP/MySQL. Le langage PHP (2)

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

PHP 5. La base de données MySql. A. Belaïd 1

Programmer en JAVA. par Tama

Héritage presque multiple en Java (1/2)

Java et les bases de données: JDBC: Java DataBase Connectivity SQLJ: Embedded SQL in Java. Michel Bonjour

Cours 1: Java et les objets

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

Langage et Concepts de Programmation Objet. 1 Attributs et Méthodes d instance ou de classe. Travaux Dirigés no2

CREATION WEB DYNAMIQUE

Introduction à JDBC. Accès aux bases de données en Java

Chapitre VI- La validation de la composition.

Java DataBaseConnectivity

Mysql. Les requêtes préparées Prepared statements

OpenPaaS Le réseau social d'entreprise

Polymorphisme, la classe Object, les package et la visibilité en Java... 1

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

Les Triggers SQL. Didier DONSEZ. Université de Valenciennes Institut des Sciences et Techniques de Valenciennes

Cours Bases de données 2ème année IUT

Application BdD et JDBC. Introduction 1/28. I Dans tout les cas, une seule problématique. I Quelques alternatives :

Initiation à JAVA et à la programmation objet.

Auto-évaluation Programmation en Java

INITIATION AU LANGAGE JAVA

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

1. Base de données SQLite

Bases de données et sites WEB Licence d informatique LI345

TP1 : Initiation à Java et Eclipse

Création d objet imbriqué sous PowerShell.

TP1. Outils Java Eléments de correction

A.E.C. GESTION DES APPLICATIONS TECHNOLOGIE DE L'INFORMATION LEA.BW

SYSTÈMES D INFORMATIONS

C++ Programmer. en langage. 8 e édition. Avec une intro aux design patterns et une annexe sur la norme C++11. Claude Delannoy

Module Com231A - Web et Bases de Données Notion 5 : Formulaires et utilisation des Bases de Données avec PHP

PHP et mysql. Code: php_mysql. Olivier Clavel - Daniel K. Schneider - Patrick Jermann - Vivian Synteta Version: 0.9 (modifié le 13/3/01 par VS)

Aide mémoire UML & Java 1ère partie : Introduction. marc.lemaire@u-cergy.fr

APIs de table pour SQL Server

as Architecture des Systèmes d Information

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

Module Administration BD Chapitre 1 : Surcouche procédurale dans les SGBDS

Programmation MacOSX / ios

Chapitre 2. Classes et objets

Diagramme de classes

Bases de SQL. Hacks 1-6 CHAPITRE UN

La base de données XML exist. A. Belaïd

Laboratoires de bases de données. Laboratoire n 6. Programmation SQL. par Danièle BAYERS et Louis SWINNEN

Objets et Programmation. origine des langages orientés-objet

Une introduction à Java

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Mysql avec EasyPhp. 1 er mars 2006

Application web de gestion de comptes en banques

Traduction des Langages : Le Compilateur Micro Java

Notes de cours : bases de données distribuées et repliquées

Django et PostgreSQL sous la charge

MapReduce. Malo Jaffré, Pablo Rauzy. 16 avril 2010 ENS. Malo Jaffré, Pablo Rauzy (ENS) MapReduce 16 avril / 15

Plan Général Prévisionnel (1/2) (non contractuel) Internet et Outils L1/IO S2-IO2 Bases de données: Jointures, Transactions

JAVA TD0. Prise en main du langage Environnement de base JAVA 1

La persistance des données dans les applications : DAO, JPA, Hibernate... COMPIL 2010 francois.jannin@inp-toulouse.fr 1

PHP. PHP et bases de données

Paginer les données côté serveur, mettre en cache côté client

TP JAVASCRIPT OMI4 TP5 SRC

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

PHP 5.4 Développez un site web dynamique et interactif

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

Attaques applicatives

Procédures Stockées WAVESOFT ws_sp_getidtable Exemple : ws_sp_getnextsouche Exemple :... 12

Projet de programmation (IK3) : TP n 1 Correction

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

Configurer la supervision pour une base MS SQL Server Viadéis Services

Génie Logiciel I. Cours VI - Typage statique / dynamique, fonctions virtuelles et classes abstraites, flots d entrées / sorties, et string

Programmation d application Bases de données avec Java

1-Introduction 2. 2-Installation de JBPM 3. 2-JBPM en action.7

Définition des Webservices Ordre de paiement par . Version 1.0

Accès aux bases de données

TP Programmation Java / JDBC / Oracle

Plateforme PAYZEN. Définition de Web-services

Premiers Pas en Programmation Objet : les Classes et les Objets

et Programmation Objet

Tous les autres noms de produits ou appellations sont des marques déposées ou des noms commerciaux appartenant à leurs propriétaires respectifs.

Licence de MIDO - 3ème année Spécialités Informatique et Mathématiques Appliquées

Principales failles de sécurité des applications Web Principes, parades et bonnes pratiques de développement

Environnements de développement (intégrés)

Gestion des transactions et accès concurrents dans les bases de données relationnelles

Soon_AdvancedCache. Module Magento SOON. Rédacteur. Relecture & validation technique. Historique des révisions

Programmation Orientée Objet application au langage Java Version Novembre 2007

Polycopié Cours Programmation Orientée Objet sous Java Programme : Filière SMI S5

SYNC FRAMEWORK AVEC SQLITE POUR APPLICATIONS WINDOWS STORE (WINRT) ET WINDOWS PHONE 8

Devenez un véritable développeur web en 3 mois!

Développement Logiciel

Facultés Universitaires Notre-Dame de la Paix. Conception et Programmation Orientées- Object

1 Position du problème

Langage Java. Classe de première SI

Modélisation PHP Orientée Objet pour les Projets Modèle MVC (Modèle Vue Contrôleur) Mini Framework

Les déclencheurs. Version 1.0. Grégory CASANOVA

A QUOI SERVENT LES BASES DE DONNÉES?

Transcription:

Programmation objet IUT de Fontainebleau 15 mars 2015

Sommaire 1 Attributs et méthodes Constructeur Référence et copie 2 Classe abstraite Classe Finale 3 Définition 4 5

Sommaire Attributs et méthodes Constructeur Référence et copie 1 Attributs et méthodes Constructeur Référence et copie 2 3 4 5

Classe Attributs et méthodes Constructeur Référence et copie Une classe encapsule des variables (appelées attributs) et des fonctions (appelées méthodes) qui fonctionnent avec ces variables. On les définit comme suit : class SendMail { public $destinataire; public $objet; public $texte; public function envoyer() { mail ($this->destinataire, $this->objet, $this->texte); $message = new SendMail (); $message->destinataire = "monnerat@u-pec.fr"; $message->objet = "un mail"; $message->texte = "a moi!"; $message->envoyer(); L accés à un attribut, ou une méthode se fait par la syntaxe fléchée ->.

Attributs et méthodes Constructeur Référence et copie Dans l exemple précédent, les attributs et méthodes sont publiques (accessibles en dehors des méthodes de la classe). On peut les choisir : private protected utilisable uniquement à l intérieur de la classe utilisable uniquement dans les classes dérivées Pour accéder à des attributs protégés en dehors de la classe, on utilise des setters et getters : public function getdestinataire() { return $this->destinataire; public function setdestinataire($qui) { $this->destinataire = $qui;

Instanciation Attributs et méthodes Constructeur Référence et copie L instanciation d une classe se fait avec le mot-clé new $monmail = new SendMail(); On peut ajouter à la classe un (seul) contructeur, avec la méthode construct. function construct($qui,$objet,$texte="????"){ $this->destinataire = $qui; $this->objet = $objet; $this->texte = $texte; automatiquement appelé à la création $monmail = new SendMail( "monnerat@u-pec.fr", "FA", "Je suis candidat" );

Accés Statique Attributs et méthodes Constructeur Référence et copie On peut déclarer un attribut ou une méthode static. On les utilise comme des variables ou fonctions classiques, indépendantes d une instance quelconque (il n y a plus de $this). Class SendMail{ static $smtp = "orion.u-pec.fr"; On y accède avec le nom de la classe echo SendMail :: $smtp;

Référence Attributs et méthodes Constructeur Référence et copie Depuis PHP5, le passage ou l affection d un objet se fait par référence. (le & est présent implicitement) class obj { public $val; function construct($x){ $this->val = $x; function tostring(){ return "val = ".$this->a; $a = new obj(1); $b = new obj(2); $a=$b; $b->val=3; echo $a; // affiche val = 3 On peut cloner explicitement l objet $a = clone $b;

Mots réservés Attributs et méthodes Constructeur Référence et copie Ces mots permettent de déclarer des classes en PHP : class const function public/protected/private self parent static extends implements Déclaration de classe Déclaration de constante de classe Déclaration d une méthode Accès la classe elle-même la classe "parent" méthode de classe (statique) de classe Implémentation d une interface Les mots clefs "self" et "parent" sont utiles pour accéder à une propriété ou méthode (statique ou non) de la classe elle-même ou de son parent.

Méthodes magiques Attributs et méthodes Constructeur Référence et copie construct() destruct() set() get() call() callstatic() isset() unset() sleep() wakeup() tostring() set_state() clone() autoload() Constructeur de la classe Destructeur de la classe Déclenchée lors de l accès en écriture à une propriété inexistante Déclenchée lors de l accès en lecture à une propriété inexistante Déclenchée lors de l appel d une méthode inexistante de la classe Déclenchée lors de l appel d une méthode inexistante de la classe Déclenchée si on applique isset() à une propriété inexistante Déclenchée si on applique unset() à une propriété inexistante Exécutée si la fonction serialize() est appliquée à l objet Exécutée si la fonction unserialize() est appliquée à l objet Appelée lorsque l on essaie d afficher directement l objet : echo $object Méthode statique lancée lorsque l on applique la fonction var_export() à l objet Appelé lorsque l on essaie de cloner l objet Cette fonction n est pas une méthode, elle est déclarée dans le scope global et permet d automatiser les "include/require" de classes PHP

Fonctions et constantes utiles Attributs et méthodes Constructeur Référence et copie Fonctions : class_parents() class_implements() get_class() get_called_class() class_exists() get_class() get_declared_classes() get_class_methods() get_class_vars() Retourne un tableau de la classe parent et de tous ses parents Retourne un tableau de toutes les interfaces implémentées par la classe et par tous ses parents ; Retourne la classe de l objet passé en paramètre À utiliser dans une classe, retourne la classe appelée explicitement dans le code PHP et non au sein de la classe Vérifie qu une classe a été définie Retourne la classe d un objet Liste des classes définies Liste des méthodes d une classe Liste des propriétés d une classe

Fonctions et constantes utiles Attributs et méthodes Constructeur Référence et copie Constantes : CLASS METHOD Donne le nom de la classe en cours Donne le nom de la méthode en cours

Exemple Attributs et méthodes Constructeur Référence et copie <?php $classes=get_declared_classes(); echo "<ul>"; foreach($classes as $classe) { echo "<li>$classe : <ul>"; $liste=get_class_methods($classe); foreach($liste as $methode) { echo "<li>$methode</li>"; echo "</ul></li>"; echo "</ul>";?>

Sommaire Classe abstraite Classe Finale 1 2 Classe abstraite Classe Finale 3 4 5

point_colore est une classe dite fille, ou dérivée de point. Classe abstraite Classe Finale simple uniquement <?php class point_colore extends point { // déclaration de la sous classe var $couleur="black"; function construct($x,$y,$couleur) { // constructeur parent:: construct($x,$y); // constructeur de la classe parente $this->couleur=$couleur; function affiche() { parent::affiche(); // appel de la méthode affiche de point echo "<p>$this->couleur</p>"; function setcouleur($couleur) { $this->couleur = $couleur; function getcouleur() { return $this->couleur;?>

Surcharge Classe abstraite Classe Finale On peut redéfinir une méthode dans une classe fille, à condition que le protype de la méthode soit compatible avec celui de la méthode dans la classe parente. Pour interdire la redéfinition, il faut utiliser le mot-clé final. La redéfinition dans une classe fille est alors impossible.

Classe abstraite Classe abstraite Classe Finale But : Définir une classe, non instanciable, en obligeant les classes filles à implanter certaines méthodes ou attributs abstract class animal { abstract function manger(); function dormir(){ echo "Zzzzz"; Toute classe dérivée, pour être instanciable, devra obligatoirement implanter la méthode manger. class chien extends animal{ function manger(){ echo "miam miam";

Finales Classe abstraite Classe Finale Comme pour les méthodes, on peut indiquer qu une classe est finale, c est à dire non dérivable.

Sommaire Définition 1 2 3 Définition 4 5

Définition Notion proche de classe abstraite. Une interface est la déclaration d une API (Application Programmaing ). Une classe implante (propose) une interface si elle définit ses fonctions. C est un moyen d être certain qu un objet particulier possède des méthodes particuliéres. interface estcarnivore { public function magerviande(); class chien implements estcarnivore { function mangervidande(){ echo "miam maim";

Sommaire 1 2 3 4 5

Autochargement Dans les applications objets, les scripts utilisant des classes doivent inclure les fichiers de définition : fastidieux Solution : fonction autoload() qui sera automatiquement appelée si vous essayez d utiliser une classe ou interface qui n est pas encore définie. Grâce à elle, vous avez une dernière chance pour inclure une définition de classe, avant que PHP n échoue avec une erreur. <?php function autoload($class_name) { include $class_name..php ; $obj = new MaClasse1(); $obj2 = new MaClasse2();?>

On peut enregistrer une (des) fonction d autoload avec spl_autoload_register.

Utilisation de chaines comme identifiant De classe : <?php $class="sendmail"; if(class_exists($class)) { $sd=new $class("smpt.free.fr");?> De fonction function barber($type){ echo "Vous voulez une coupe $type, ok"; if (is_callable( barber )){ call_user_func( barber, "au bol"); call_user_func( barber, "au rasoir");

De méthode $monobjet = new maclasse(); $methode = array($monobjet, "dit_bonjour"); if (is_callable($methode)){ call_user_func($methode);

Sommaire 1 2 3 4 5

PDO commune d accès à différents SGBD. Extension PHP qui est incluse dans la distribution standard depuis PHP 5.1 Abstraction logique qui nécessite des drivers particuliers selon le sgbd. Possède trois classes : PDO PDOStatement PDOException la classe d interaction principale avec le SGBD la classe gérant les résultats de requêtes, préparées, ou exécutées classe d exception

Connexion <?php $pdo = new PDO( mysql:host=localhost;dbname=tp3, mylogin, mypassword ); // iteration classique $res = $pdo->query("select nom FROM professeur"); while ($result = $res->fetch()) { echo $result[ nom ]; // iteration avec l interface traversable foreach ($res as $result) { echo $result[ nom ];?>

Résultat La méthode fetch de PDOStatement est contrôlée par le fetch_style, que l on peut positionner en argument de cette méthode, ou avec la méthode setfetchmode <?php $pdo = new PDO( mysql:host=localhost;dbname=tp3, mylogin, mypassword ); $res = $pdo->query("select nom FROM professeur"); $res->setfetchmode(pdo::fetch_obj); foreach ($res as $result) { echo $result->nom;?>

Il existe d autres façons de récupérer un jeu de résultat. En particulier, PDO : :FETCH_CLASS : retourne une nouvelle instance de la classe demandée, liant les colonnes du jeu de résultats aux noms des propriétés de la classe.

Requêtes int PDO::exec ( string $statement ) exécute une requête SQL dans un appel d une seule fonction, retourne le nombre de lignes affectées par la requête. PDO : :exec() ne retourne pas de résultat pour une requête SE- LECT. Pour une requête SELECT dont vous auriez besoin une seule fois dans le programme, utilisez plutôt la fonction PDO : :query(). Pour une requête dont vous auriez besoin plusieurs fois, préparez un objet PDOStatement avec la fonction PDO : :prepare() et exécutez la requête avec la fonction PDOStatement : :execute().

Requêtes préparées Emulées par PDO si le driver ne les supporte pas. Exemple en insert $stmt = $dbh->prepare("insert INTO REGISTRY (name, value) VALUES (:name, :value)"); $stmt->bindparam( :name, $name); $stmt->bindparam( :value, $value); // insertion d une ligne $name = one ; $value = 1; $stmt->execute(); // insertion d une autre ligne $name = two ; $value = 2; $stmt->execute();

Remarques On peut utiliser? comme marqueur de paramètre dans la requête : $stmt = $dbh->prepare("insert INTO REGISTRY (name, value) VALUES (?,?)"); $stmt->bindparam(1, $name); $stmt->bindparam(2, $value); // insertion d une ligne $name = one ; $value = 1; $stmt->execute(); La méthode PDOStatement::bindValue permet d associer une valeur à un paramètre. On peut passer les paramètres de la requête dans la méthode PDOStatement::execute : $stmt = $dbh->prepare("insert INTO REGISTRY (name, value) VALUES (?,?)"); // insertion d une ligne $name = one ; $value = 1; $stmt->execute(array($name,$value));

Requêtes préparées Exemple en select <?php $stmt = $dbh->prepare("select * FROM REGISTRY where name =?"); if ($stmt->execute(array($_get[ name ]))) { while ($row = $stmt->fetch()) { print_r($row);?>

Transactions Atomicité, Consistance, Isolation et Durabilité (ACID). toutes les bases de données ne supportent pas les transactions, donc, PDO doit s exécuter en mode "autocommit" lorsque vous ouvrez pour la première fois la connexion. PDO : :begintransaction() pour l initialiser. PDO : :commit() ou la fonction PDO : :rollback() pour la terminer.

/* Commence une transaction, désactivation de l auto-commit */ $dbh->begintransaction(); /* Insérer plusieurs enregistrements sur une base tout-ou-rien */ $sql = INSERT INTO fruit (name, colour, calories) VALUES (?,?,?) ; $sth = $dbh->prepare($sql); foreach ($fruits as $fruit) { $sth->execute(array( $fruit->name, $fruit->colour, $fruit->calories )); /* Valider les modifications */ $dbh->commit(); /* La connexion à la base de données est maintenant * de retour en mode auto-commit */

<?php /* Démarre une transaction, désactivation de l auto-commit */ $dbh->begintransaction(); /* Modification du schéma de la base ainsi que des données */ $sth = $dbh->exec("drop TABLE fruit"); $sth = $dbh->exec("update dessert SET name = hamburger "); /* On s aperçoit d une erreur et on annule les modifications */ $dbh->rollback(); /* Le connexion à la base de données est maintenant de * retour en mode auto-commit */?>