Les primitives java, conditions, boucles..
Object, classes, Carcatéristiques...
Héritage et accessibilité (package, visibilité)
polymorphisme
Tableau et collections
Connexion base de données via JDBC
Objectif général
Prendre en main l’un des frameworks PHP les plus utilisés
Objectifs opérationnels :
Faire correspondre une URL donnée à un traitement précis grâce au routage
Traiter les requêtes grâce aux contrôleurs
Intégrer des données dans des templates grâce à TWIG
Faciliter la communication avec une base de données grâce à Doctrine
Permettre à un utilisateur d’initialiser ou de modifier les attributs d'un objet métier grâce aux formulaires
Les primitives java, conditions, boucles..
Object, classes, Carcatéristiques...
Héritage et accessibilité (package, visibilité)
polymorphisme
Tableau et collections
Connexion base de données via JDBC
Objectif général
Prendre en main l’un des frameworks PHP les plus utilisés
Objectifs opérationnels :
Faire correspondre une URL donnée à un traitement précis grâce au routage
Traiter les requêtes grâce aux contrôleurs
Intégrer des données dans des templates grâce à TWIG
Faciliter la communication avec une base de données grâce à Doctrine
Permettre à un utilisateur d’initialiser ou de modifier les attributs d'un objet métier grâce aux formulaires
Support Dot Net avec C#. Ce cours traite les points suivants :
- Architecture .Net
- Les bases de C#
- Objet et Classe
- Héritage
- Encapsulation
- Polymorphisme
- Les exceptions
- Les entrées sorties
- Les interfaces graphiques
- Le multi Threading
- Programmation réseaux (Sockets et DataGram)
- Accès aux bases de données
Objectif général : Découvrir l'un des SGBDs noSQL les plus utilisés
Objectifs spécifiques :
Installer et démarrer un serveur et un client mongo
Créer une base de données dans un serveur mongo
Créer une collection dans une base de données mongo
Connaître les principaux types de données
Insérer des données
Consulter des données
Modifier des données
Supprimer des données
Ce premier cours présente les notions d'objet et de classe, et le lien entre elles. Il présente aussi le premier concept clé de la programmation orientée objet, à savoir l'encapsulation des données. Les exemples sont fournis dans plusieurs langages (Python, C#, Java, C++ et PHP).
Exemple d'application qui montre comment utiliser les bonnes pratiques de JEE pour développer un site web de commerce électronique en utilisant les outils :
- Eclipse comme environnement de développement
- Maven comme outil d’intégration
- JUnit comme Framework des tsts unitaire
- Spring IOC pour l'inversion de contrôle
- Spring MVC pour la couche web
- Spring Security pour la sécurité
- JPA, Hibernate
- Web Service SOAP
- Web Service REST
- Service RMI
Dans ce cours, on découvre comment lire et écrire des fichiers à l'aide de Python. Il est possible de créer des fichiers texte ou des fichiers binaires. Pour manipuler un fichier, il faut d'abord l'ouvrir, puis on peut faire les opérations et enfin on doit le refermer.
Objectif général : Connaître les fondamentaux d’une API REST
Objectifs spécifiques :
Savoir définir une API
Connaître l’architecture REST
Connaître les contraintes du REST
Connaître la structure d’une requêtes HTTP
Connaître les caractéristiques d’une ressources
Se servir des méthodes HTTP
Connaître la structure d’une réponses HTTP
Connaître les codes HTTP
Construire une application sur l'architecture modèle-vue-contrôleur en PHP à partir d'un exemple simple : une liste de choses à faire, avec deux pages types : liste et détails.
Php 2 - Approfondissement MySQL, PDO et MVCPierre Faure
Introduction au langage de programmation PHP.
Présentation réalisée la première fois le lundi 10 mars 2014 à l'IIM : Institut de l'Internet et du Multimédia pour les années préparatoires.
Cette présentation a pour but d'approfondir les compétences PHP des élèves : utiliser des bases de données, comprendre PDO et le modèle MVC (basique).
Après présentation orale de ces slides, des exercices de mise en pratique ont été réalisés en Atelier avec les élèves.
L'exercice principal était de construire une plateforme similaire à twitter selon un modèle MVC.
Voici le plan de la présentation :
• Les bases de données : MySQL
- Principe
- phpMyAdmin
- Interagir avec une BDD
• Les fonctions
- La machine à carottes
- Exemple avec MySQL
- Les fonctions PHP
• Modèle Vue Contrôleur - MVC
- Principe
- Mise en pratique
• Quelques trucs à savoir a.$_FILES et $_POST
- $_SESSION
- L’indentation
- PHP + HTML = ?
Support Dot Net avec C#. Ce cours traite les points suivants :
- Architecture .Net
- Les bases de C#
- Objet et Classe
- Héritage
- Encapsulation
- Polymorphisme
- Les exceptions
- Les entrées sorties
- Les interfaces graphiques
- Le multi Threading
- Programmation réseaux (Sockets et DataGram)
- Accès aux bases de données
Objectif général : Découvrir l'un des SGBDs noSQL les plus utilisés
Objectifs spécifiques :
Installer et démarrer un serveur et un client mongo
Créer une base de données dans un serveur mongo
Créer une collection dans une base de données mongo
Connaître les principaux types de données
Insérer des données
Consulter des données
Modifier des données
Supprimer des données
Ce premier cours présente les notions d'objet et de classe, et le lien entre elles. Il présente aussi le premier concept clé de la programmation orientée objet, à savoir l'encapsulation des données. Les exemples sont fournis dans plusieurs langages (Python, C#, Java, C++ et PHP).
Exemple d'application qui montre comment utiliser les bonnes pratiques de JEE pour développer un site web de commerce électronique en utilisant les outils :
- Eclipse comme environnement de développement
- Maven comme outil d’intégration
- JUnit comme Framework des tsts unitaire
- Spring IOC pour l'inversion de contrôle
- Spring MVC pour la couche web
- Spring Security pour la sécurité
- JPA, Hibernate
- Web Service SOAP
- Web Service REST
- Service RMI
Dans ce cours, on découvre comment lire et écrire des fichiers à l'aide de Python. Il est possible de créer des fichiers texte ou des fichiers binaires. Pour manipuler un fichier, il faut d'abord l'ouvrir, puis on peut faire les opérations et enfin on doit le refermer.
Objectif général : Connaître les fondamentaux d’une API REST
Objectifs spécifiques :
Savoir définir une API
Connaître l’architecture REST
Connaître les contraintes du REST
Connaître la structure d’une requêtes HTTP
Connaître les caractéristiques d’une ressources
Se servir des méthodes HTTP
Connaître la structure d’une réponses HTTP
Connaître les codes HTTP
Construire une application sur l'architecture modèle-vue-contrôleur en PHP à partir d'un exemple simple : une liste de choses à faire, avec deux pages types : liste et détails.
Php 2 - Approfondissement MySQL, PDO et MVCPierre Faure
Introduction au langage de programmation PHP.
Présentation réalisée la première fois le lundi 10 mars 2014 à l'IIM : Institut de l'Internet et du Multimédia pour les années préparatoires.
Cette présentation a pour but d'approfondir les compétences PHP des élèves : utiliser des bases de données, comprendre PDO et le modèle MVC (basique).
Après présentation orale de ces slides, des exercices de mise en pratique ont été réalisés en Atelier avec les élèves.
L'exercice principal était de construire une plateforme similaire à twitter selon un modèle MVC.
Voici le plan de la présentation :
• Les bases de données : MySQL
- Principe
- phpMyAdmin
- Interagir avec une BDD
• Les fonctions
- La machine à carottes
- Exemple avec MySQL
- Les fonctions PHP
• Modèle Vue Contrôleur - MVC
- Principe
- Mise en pratique
• Quelques trucs à savoir a.$_FILES et $_POST
- $_SESSION
- L’indentation
- PHP + HTML = ?
Une révision des principaux concepts du langage JavaScript : variables, fonctions, types, fermetures (closures), objets et prototypes, format JSON. De nombreux exemples téléchargeables sur GitHub.
Bonnes pratiques de developpement en PHPPascal MARTIN
Du haut de ses 14 ans, PHP est devenu une technologie utilisée pour de gros projets ; ce qui signifie besoins importants en termes de qualité, de robustesse, et d'outils de développement fiables.
Contrôle de sources, normes de codage, utilisation de Frameworks, documentation, tests unitaires / fonctionnels automatisés, intégration continue, déploiement, ...
Cette présentation a pour but d'introduire quelques bonnes pratiques de développement, ainsi que des outils permettant de les mettre en place sur des projets PHP.
Le cryptage RSA est-il intrinsèquement inviolable ? Pour le savoir, nous essayons de comprendre comment il fonctionne et sur quelles mathématiques il s'appuie.
Introduction au langage de programmation PHP.
Présentation réalisée la première fois le lundi 10 mars 2014 à l'IIM : Institut de l'Internet et du Multimédia pour les années préparatoires.
Cette présentation a pour but d'initier les élèves à l'apprentissage de PHP : comprendre sa logique, expliquer les bases de ce langage, sa syntaxe et dans quels cas il peut être utilisé.
Après présentation orale de ces slides, des exercices de mise en pratique ont été réalisés en Atelier avec les élèves.
Voici le plan de la présentation :
• Php, Le principe
• Les basiques
- Les variables
- Afficher un élément
• Les indispensables
- Les conditions
- Les boucles
- Les tableaux
• Les utiles
- Les fonctions
- GET & POST
- Include
Plone - Déployer un intranet collaboratif avec intégration d'un annuaire LDAPParis, France
Pilot Systems présente une étude sur le déploiement d\'un intranet collaboratif sous Plone. Support du tutoriel Plone, présenté lors de Solutions Linux 2008
Extrait du cours de PHP et PHP Framework.
Contenu de l'extrait :
- Les différents types de stockage des données (navigateur et serveur).
- Qu'est ce que le protocole HTTP ?
- Comment authentifier des utilisateurs de manière sécurisée ?
Pour découvrir nos formations ou en savoir plus, rendez-moi visite sur mon LinkedIn : https://www.linkedin.com/pub/jérémie-campari/55/205/275
Toute application Web dite dynamique nécessite une base de données ainsi que des outils qui permettront de manipuler ces données.Dans la palette des outils à la disposition des développeurs PHP, on trouve entre autres les DBAL (DataBase Abstraction Layer ou couche d'abstraction de base de données) ou les ORM (Object Relational Mapping ou mapping objet-relationnel).
Design patterns et Design Emergeant - Micro Days - Modern Software Developmen...Tarik Zakaria Benmerar
Quels sont les principes d'une bonne conception de logiciel ? Quels sont les design patterns les plus importants ?
Comment assurer l'évolution de la conception ?
Toute application Web dite dynamique nécessite une base de données ainsi que des outils qui permettront de manipuler ces données.
Dans la palette des outils à la disposition des développeurs PHP, on trouve entre autres les DBAL (DataBase Abstraction Layer ou couche d'abstraction de base de données) ou les ORM (Object Relational Mapping ou mapping objet-relationnel).
Le développement d'applications lourdes à base de JavaScript est désormais possible. Cependant, cela requiert de bien connaître le langage en lui-même ainsi que les meilleurs patterns et pratiques établit ces 10 dernières années à travers des frameworks comme YUI ou jQuery par exemple. Vous verrez donc ici comment bien structurer votre code, comment utiliser des approches permettant de palier à certaines limitations de JS et comment également industrialiser le code grâce à la mise en place de tests unitaires.
Présentation en détail de l'analyse statique : ses fondements en PHP, ses mécanismes internes, les processus d'augmentation des connaissances et de personnalisation des analyses, ainsi que les résultats d'audits.
Objectif général : Développer en orienté objet avec Python
Objectifs opérationnels :
- Organiser le code grâce aux classes
- Sécuriser une classe avec l’encapsulation
- Réutiliser et factoriser du code avec l’héritage
- Invoquer des méthodes de même nom, quel que soit le type d'objet sur lequel elles opèrent, sans avoir à effectuer au préalable une vérification de type grâce au polymorphisme
Objectif général : Acquérir les connaissances nécessaires à la programmation avec le langage Python
Objectifs opérationnels :
- Mémoriser des données primitives
- Traiter des données
- Communiquer avec l’extérieur
- Contrôler le flux d’exécution des instructions
- Mémoriser des données composites
- Découper et réutiliser du code
Qu'est ce que PHP ? Dans ce diaporama, vous allez découvrir les principes de base de PHP dans une courte introduction et apprendre à créer vous aussi des sites web dynamiques.
Pour plus de tuto: https://www.funinformatique.com/comment-pirater-un-compte-facebook/
PHP : (Hypertext Preprocessor") est un langage de scripts:
Coté serveur,
Open Source,
et spécialement conçu pour le développement d'applications web.
Il peut être intégré facilement au HTML.
Similaire à Programmation orientée objet en PHP 5 (20)
5. Motivation
Il en découle deux styles de programmation
RAM
données
Processeur
traitements
Impérative
Se concentre sur les traitements
Orientée objets (POO)
Se concentre sur les données
(concepts)
5
7. Inconvénients
Correct, fait le job, mais...
• Difficile à suivre et à lire
• Impossible de collaborer
avec un intégrateur ou un designer
• Maintenabilité décroit à mesure que le code croit
• Ajouter une fonctionnalité, c’est souvent hacker
7
8. Programmation orientée objets
Notion centrale : la classe
• Une classe = un concept utilisé dans un projet
Exemple : utilisateur, base de données, produit, etc.
• On détermine des services associés à chaque classe :
méthodes
• Comporte des données : attributs
8
14. Vocabulaire
Classe
Un nouveau type de données,
comportant des attributs et des méthodes
Attribut
Une donnée propre à une classe
Méthode
Une fonction propre à une classe
Joueur
score
dessiner()
14
15. Vocabulaire
Instancier une classe
Allouer la mémoire nécessaire pour une classe
Objet
Une instance de classe
Joueur
score
dessiner()
$pierre = new Joueur;
$paul = new Joueur;
$pierre->score = 10;
$paul->dessiner();
15
16. Vocabulaire
classe = type
Types en PHP :
•Avant : NULL, bool, int, float, string, array.
•Maintenant : Mail, Produit, Utilisateur,Voiture...
objet = instance en mémoire
En première approx. : objet = variable de type classe
Mais deux variables peuvent en fait pointer sur le
même objet.
16
18. class User {
public $firstName = "Unknown";
public $lastName = "";
public function getDisplayName() {
return $this->firstName
." ".$this->lastName;
}
public function printDisplayName() {
echo $this->getDisplayName();
}
}
$pers1 = new User();
$pers1->firstName = "Paul";
$pers1->lastName = "Dupont";
$pers1->printDisplayName();
Exemple 1
19. Accès aux membres
$pers1->lastName = "Dupont";
$pers1->printDisplayName();
Membre = méthode ou attribut
Opérateur -> pour accéder aux membres d’un objet
19
20. $this
echo $this->getDisplayName();
Une variable spéciale qui fait référence à l’instance
courante.
Toujours disponible dans les méthodes, sauf pour les
méthodes statiques (voir plus loin).
20
21. Instanciation
$pers1 = new User();
Crée en mémoire une variable $pers1
de type User :
• Alloue la mémoire nécessaire
• Initialise les attributs
21
22. class User {
public $firstName = "Unknown";
public $lastName = "";
public function getDisplayName() {
return $this->firstName
." ".$this->lastName;
}
public function printDisplayName() {
echo $this->getDisplayName();
}
}
class Admin extends User {
public $password = "";
public function getDisplayName() {
return $this->firstName . " (admin)";
}
}
Exemple 2
22
23. Héritage
class Admin extends User
Les classes héritées :
• Bénéficient des membres de leurs parents
• Peuvent définir de nouveaux membres
• Peuvent redéfinir des membres (polymorphisme)
23
24. class User {
public $firstName = "Unknown";
public $lastName = "";
public function getDisplayName() { ... }
public function printDisplayName() { ... }
}
class Admin extends User {
public $password = "";
public function getDisplayName() { ... }
}
$me = new Admin();
$other = new User();
echo "Message de ";
$me->printDisplayName();
echo " à ";
$other->printDisplayName();
Message de Unknown (admin) à Unknown
Exemple 2b
Polymorphisme
25. Appel de méthode parente
• Utilisation de l’opérateur :: de résolution de
portée, avec le mot-clé parent
class Admin : extends User {
public function getDisplayName() {
return parent::getDisplayName() . " (admin)";
}
}
25
26. class FormHelper {
public $method = "post";
private $fields = array();
public function addField($name, $type, $label) {
$this->fields[] = array($name, $type, $label);
}
public function getHTML() {
$html = '<form method="'.$this->method.'">';
foreach( $this->fields as $f ) {
...
}
$html.= '</form>';
return $html;
}
}
$f = new FormHelper();
$f->addField("name", "text", "Nom");
echo $f->getHTML();
Exemple 3
27. Visibilité
Un membre doit être déclaré soit :
• public
• protected
• private
visible par tous, donc de l’extérieur
visible par la classe et les héritiers
visible uniquement par la classe
27
28. Classes et méthodes finales
• Les classes finales ne peuvent pas avoir d’héritier.
• Les méthodes finales ne peuvent pas être redéfinies
par les héritiers.
class User {
final public function check($name, $pass) { ... }
}
final class GlobalChecker { ... }
28
29. Membres statiques
Une classe peut avoir des membres statiques,
accessibles sans instancier la classe :
• Attributs : propres à la classe et non à l’objet
• Méthodes : $this interdit, ne peuvent accéder
qu’aux membres statiques
Appel par l’opérateur de résolution de portée ::
et non ->
29
30. class User {
static public function getCount() {
...
mysqli_query("SELECT COUNT(*) FROM t_usr");
...
return $nb;
}
}
$count = User::getCount();
echo "Il y a $count utilisateurs inscrits !";
Exemple
31. class About {
static private $version = "2.0.1";
static public function getVersion() {
return self::$version;
}
}
echo "Version courante : ". About::getVersion();
Exemple
32. Constantes de classe
• Non modifiables, pas de préfixe $
• Toujours publiques
• Accès interne par self:: , externe par Circle::
• Valeurs littérales et types simples uniquement
class Circle extends Shape {
const PI = 3.1415;
public $x, $y, $r;
public function getPerimeter() {
return 2. * self::PI * $r
}
}
32
33. Typage explicite
En anglais : type hinting
Permet d’imposer la classe d’un paramètre de fonction
ou de méthode : à utiliser abondamment
• Auto-documente le code, limite les erreurs
• NULL interdit au moment de l’appel,
sauf si on l’indique comme valeur par défaut
• On peut typer les objets par leur classe, les interfaces
(voir plus loin), les tableaux (avec array), mais pas les
types simples (int, float, bool, string)
33
34. class User {
protected $id;
public function getId() { ... }
...
}
class Ad {
protected $owner;
public function setOwner(User $user) {
$this->owner = $user;
}
...
}
function canEdit(Ad $ad, User $usr)
{
return $usr->getId()
=== $ann->getOwner()->getId();
}
Exemple typage explicite
36. Définition
• Méthodes particulières dont le nom est imposé
• Optionnellement définies par le développeur
• Nom commence par __
• Invoquées automatiquement par PHP, dans certains
contextes, lorsqu’elles sont définies.
36
38. __destruct()
• Appelé lors de la
destruction de l’objet
• Sert à nettoyer
• Pas de paramètres
Constructeur et destructeur
__construct()
• Appelé lors de la
création de l’objet
• Sert à initialiser l’objet
• Peut avoir des
paramètres :
dans ce cas, il faut
fournir des valeurs au
moment du « new »
38
39. __get($name)
• Obtenir une valeur
Attributs inaccessibles
ou non définis
__isset($name)
• Tester si un attribut
existe (avec isset)
__set($name, $value)
• Affecter une valeur
__unset($name)
• Appel de unset sur
l’attribut
39
40. Méthodes inaccessibles
ou non définies
__call($name, array $arg)
• Appel d’une méthode sur un objet avec ->
__callStatic($name, array $arg)
• Appel d’une méthode statiquement avec ::
40
41. Exempleclass MyReadOnlyClass
{
protected $data = array();
public function __construct( array $data ) {
$this->data = $data;
}
public function __get( $attr ) {
if( isset( $this->data[$attr] ) )
return $this->data[$attr];
trigger_error("Attribut non défini", E_USER_ERROR);
}
public function __set( $attr, $value ) {
trigger_error("Lecture seule", E_USER_ERROR);
}
public function __isset( $attr ) {
return isset( $this->data[$attr] );
}
public function __unset( $attr ) {
trigger_error("Lecture seule", E_USER_ERROR);
}
}
43. Copie d’objets
$pers2 = $pers1;
Ne crée pas en mémoire un nouvel objet
• Crée une nouvelle référence vers le même objet
• $pers2 est un alias de $pers1
Ainsi :
$pers2->firstName = "Durand";
echo $pers1->firstName; // Durand
43
44. Clonage
$pers2 = clone $pers1;
Crée une nouvelle instance qui vivra indépendamment
• Les attributs de $pers1 sont copiés dans $pers2
(au sens de l’opérateur =)
• La mémoire est allouée de nouveau
• Si la méthode magique __clone() est définie, elle sera
appelée sur l’objet cloné juste après la copie
44
45. Exemple
class MyClass
{
public static $nbInstances = 0;
protected $object;
public function __construct() {
$this->instance = ++self::$instances;
$this->object = new myOtherClass();
}
public function __clone() {
$this->instance = ++self::$instances;
$this->object = clone $this->object;
}
}
46. class Person
{
public $nom = "Pierre Durand";
public function __toString() {
return $this->nom;
}
}
$pers = new Person;
echo $pers; // Pierre Durand
Conversion en string
__toString()
• Méthode
magique appelée
dans tous les
contextes
où l’objet doit
être converti en
chaîne de
caractères
46
48. Interfaces
Un « modèle » de classe qui spécifie simplement les
méthodes publiques à implémenter, sans le faire
interface Affichable {
public function affiche();
}
class Person implements Affichable {
public $nom;
public function affiche() {
echo $this->nom;
}
}
48
On spécifie ici qu’un objet pourra être
qualifié d’«affichable» dès lors qu’il
possèdera une méthode «affiche»
49. Interfaces
Particularités :
• Une même classe peut implémenter plusieurs
interfaces
• Peuvent hériter les unes des autres
• Peuvent définir des constantes
interface AA extends A {
...
}
class C implements AA, B, D {
...
}
49
50. Classe abstraite
Classe dont une méthode au moins est abstraite,
c’est-à-dire non implémentée.
Doit être héritée, ne peut être instanciée.
50
51. Exemple
abstract class BinaryOperator {
protected $x = 0, $y = 0;
abstract public function compute();
public function displayResult() {
echo $this->compute();
}
}
class Addition extends BinaryOperator {
public function compute() {
return $this->x + $this->y;
}
}
$ope1 = new Addition(); // ok
$ope2 = new BinaryOperator(); // erreur !
53. Boîtes d’encombrement 2D
Soit une forme géométrique en 2D, on appelle boîte
d’encombrement un rectangle (idéalement minimal) qui la
contient. Ici un rectangle est défini par 2 coins opposés
(c’est-à-dire que les côtés sont parallèles aux axes).
53
54. Boîtes d’encombrement 2D
Définir deux interfaces :
• iShape : une forme 2D (point, droite, rectangle, etc)
• iBoundingBox : une boite d’encombrement 2D
54
61. Opérateur instanceof
x instanceof y est true si :
• x est un objet de classe y
(y compris par héritage)
• x est un objet dont la classe implémente l’interface y
(y compris par héritage)
Remarque : y peut être un nom littéral ou une variable
de type string
61
62. interface iA { }
class A implements iA { }
class AB extends A { }
class B {}
$ab = new AB();
$str = "AB";
// tout imprime TRUE sauf le 2ème
var_dump( $ab instanceof AB );
var_dump( $ab instanceof B );
var_dump( $ab instanceof iA );
var_dump( $ab instanceof A );
var_dump( $ab instanceof $str );
Exemple
62
63. Tests d’existence
Tester l’existence d’une classe :
bool class_exists ( string $class_name )
Tester l’existence d’une méthode
(indépendamment de sa visibilité) :
bool method_exists ( mixed $object ,
string $method_name )
63
64. Tests d’« appelabilité »
bool is_callable ( callable $name )
• Le paramètre est soit :
Une chaîne (vérifie l’appelabilité d’une fonction)
Un tableau array( objet, chaine ) ou ( chaine, chaine )
(vérifie l’appelabilité d’une méthode)
• Ce genre de paramètre s’appelle «callback» ou
«callable» dans la doc PHP
64
65. Exemplefunction f() {}
class A {
public function fpub() {}
protected function fprot() {}
static public function fstat() {}
}
class B extends A {
public function b() {
var_dump( is_callable( array($this, "fprot") ) );
}
}
$b = new B();
var_dump( is_callable ( "f" ) ); // true
var_dump( is_callable ( array("A", "fstat" ) ) ); // true
var_dump( is_callable ( array("A", "fpub" ) ) ); // true!
var_dump( is_callable ( array($b, "fpub" ) ) ); // true
var_dump( is_callable ( array($b, "fprot" ) ) ); // false
$b->b(); // true
66. Exécution de callback
mixed call_user_func ( callable $callback
[, mixed $parameter
[, mixed $... ]] )
• Le premier paramètre est un callback
• Les suivants sont les paramètres du callback
• Le callback sera appelé, s’il existe.
• Variante :
mixed call_user_func_array (
callable $callback, array $params )
66
67. Exemple
class ActionManager {
public function Load($id) { ... }
public function Save($id) { ... }
public function Delete($id) { ... }
public function Run($id) { ... }
}
$mgr = new ActionManager();
$act = $_GET["action"];
$id = intval( $_GET["id"] );
if( method_exists(array($mgr, $act)) ) {
call_user_func(array($mgr, $act), $id);
}
else {
throw new ErrorException("Action inexistante");
}
68. Remerciements
68
Cette présentation est partiellement issue de la
traduction de celle de Jason Austin, « Object Oriented
Principles in PHP5 » :
http://fr.slideshare.net/jfaustin/object-oriented-php5
Des exemples originaux ont été ajoutés.