Archives par mot-clé : singleton

Récapitulatif PHP Objet

Publié dans PHP objet | Laisser un commentaire

Logo PHP

Ce billet vient récapituler la série sur PHP Objet que j’ai effectuée entre mai à juillet 2009. Le but est de faire le point sur PHP Objet, sur mes connaissances et sur les publications réalisés à ce sujet sur 30minparjour. Désormais, j’essayerai de faire un tel résumé pour toutes les séries que j’aborderai. C’est long et fastidieux, mais je pense que cela m’est utile pour faire le point. J’espère que cela vous servira aussi.

Résumons quelques points importants

Petit résumé sur les classes

[abstract ]class MaClasse [extends AutreClasse implements Interface]
{
	public|protected|private [static] $maVariable [= valeur];
	public static $etat = 1;
	
	/**
	 * Constructeur
	*/
	public|protected|private function MaClass|__construct()
	{
		// Déclaration des variables et autres
	}
	
	/**
	 * Fonction classique
	*/
	public|protected|private [static final abstract] function maMethode()
	{
		// Action de la fonction maMethode
		$this--->maVariable = 'test';
		self::$etat = 0;
		$this->autreMethode();
		[parent::autreMethode();]
	}
	public function $autreMethode()
	{
		echo 'Hello world!';
	}
}

Au passage, je rappelle qu’une classe peut implémenter plusieurs interfaces, mais ne peut hériter que d’une seule classe.

Petit résumé sur les interfaces

interface Interface [extends AutreInterface]
{
	/**
	 * Fonction classique
	*/
	public function $maMethode();
	/**
	 * Autre fonction classique
	*/
	public function $autreMethode();
}

Petit résumé sur les singletons

class Singleton
{
	/**
	 * Variable static valant null si la classe n'est pas encore instanciée
	 * ou contenant l'instance si la classe est instanciée.
	 * On y accède avec self::$_instance
	*/
	private static $_instance = null;
	
	/**
	 * Constructeur private inaccessible en dehors de la classe
	*/
	private function __construct()
	{
		// On instancie ce qu'il faut
	}
	
	/**
	 * Accessor static, donc accessible sans être instancié, renvoyant 
	 * l'instance, en la créant si besoin
	*/
	public static function getInstance()
	{
		if (self::$_instance == null) {
			self::$_instance = new Singleton();
		}
		return self::$_instance;
	}
}

Quelques méthodes magiques utiles

  • __construct() : Appelée lorsqu’on tente de construire la class
  • __destruct() : Appelée lorsqu’on tente de détruire la class
  • __set() : Déclenchée lors de l’accès en écriture à une propriété de l’objet. Exemple d’utilisation
  • __get() : Déclenchée lors de l’accès en lecture à une propriété de l’objet. Exemple d’utilisation
  • __call() : Déclenchée lors de l’appel d’une méthode inexistante de la classe (appel non static). Exemple d’utilisation
  • __callstatic() : Déclenchée lors de l’appel d’une méthode inexistante de la classe (appel static) : disponible depuis PHP 5.3 et 6.0
  • __isset() : Déclenchée si on applique isset() à une propriété de l’objet
  • __unset() : Déclenchée si on applique unset() à une propriété de l’objet -> différence avec __destruct() ?
  • __sleep() : Exécutée si la fonction serialize() est appliquée à l’objet. Exemple d’utilisation
  • __wakeup() : Exécutée si la fonction unserialize() est appliquée à l’objet. Exemple d’utilisation
  • __toString() : Appelée lorsque l’on essaie d’afficher directement l’objet : echo $object;
  • __clone() : Appelé lorsque l’on essaie de cloner l’objet. Exemple d’utilisation

Conclusion

Je crois qu’on vient de faire un tour vraiment rapide mais plus ou moins complet du PHP Objet. A mon sens, il manque 3 notions à ce résumé (mais on ne peut pas tout résumer) :

  • Les exceptions. Il faudrait que je m’y mette un jour. Heureusement il existe un très bon tutoriel sur « Apprendre PHP » : Les exceptions.
  • Un autre chose plutôt cool qu’aborde « Apprendre PHP » est l’interface Iterator, quoi que je ne vois pas trop l’interêt en PHP, mais je sais combien c’est cool en Java !
  • La copie d’une classe. Je l’ai quand même vraiment pas mal résumé ici : Le clônage n’est pas une référence.

Billets traitant de PHP Objet

J’ai trié et classé toutes les publications que j’ai fait sur ce blog à propos du PHP Objet.

Apprentissage

Application

Trucs et astuces

Documentation et tutoriels

Je vous présente les quelques sites que j’ai fréquemment utilisé pour comprendre le fonctionnement et les finesses de PHP et du PHP orienté objet.

Singleton(s) !

Publié dans PHP objet | Commentaires fermés sur Singleton(s) !

Voilà bien longtemps que je n’avais pas fait de billets sur le PHP Objet. A vrai dire, je suis en train d’apprendre la programmation orientée objet en cours (au travers du Java et du C++), donc ça fixe vraiment les idées et permet de comprendre pas mal de petites choses, notamment l’utilité de certaines notions, comme les singletons, qui me paraissait bien douteuse auparavant. Un singleton, c’est une classe que l’on ne peut instancier qu’une seule fois. Par exemple, en cours on a créé une classe liste dont hérite la classe liste vide, et la classe listeNonVide. Clairement, il n’existe qu’une et une seule liste vide (sinon, on ne s’en sort pas), donc cette classe ne peut être instanciée qu’une seule fois, donc c’est un singleton. Je n’ai pas encore trouvé d’exemples plus parlant, par contre sur Apprendre-PHP, l’exemple est celui d’une classe PresidentDeLaRepublique qui, en effet, ne peut être instanciée qu’une seule fois)

Comment faire ?

L’idée est la suivante : le constructeur de la classe est private, on ne peut donc instancier la classe en passant directement par lui. Par contre, une variable static possède un accessor (getMachin()) qui est public et qui appelle le constructeur si la classe n’est pas encore instanciée (variable static == null), ou retourne l’instance sinon. En somme, voilà ce que ça donne :
Continuer la lecture