Cette classe est-elle un singleton?

Par hugopb82, il y a 11 ans


Bonjour tout le monde, je suis en ce moment la formation POO en php et je voudrais savoir si cette classe était un singleton car je ne comprend pas pourquoi la fonction construct ne pourrait pas faire ce que fait getInstance.
Le code de ma classe :

<?php class Singleton{ public static $_instance; public function __construct(){ if(is_null(self::$_instance)){ self::$_instance = new Singleton(); } return self::$_instance; } } ?>

Merci d'avance!

4 réponses

TransientDev, il y a 11 ans

Bonsoir,
sauf si erreur de ma part, la methode construct n'est appelée que lors de la creation de l'objet. Donc si après tu as besoin de recuperer l'instance tu ne pourras pas.
Cordialement.

oversoul, il y a 11 ans
<?php class Singleton{ public static $_instance; public static function make() { if(is_null(self::$_instance)){ self::$_instance = new Singleton(); } return self::$_instance; } private function __construct(){ return $this; } } ?>

ensuite tu peux l'appelé comme ca:

$singleton = Singleton::make();
Ramzz1994, il y a 11 ans

Tant et aussi longtemps qu'il n'y aura pas officielement de Thread en PHP, la solution est la suite. (elle contient de détails que oversoul a oublié)

<?php class Singleton { /** * @var Singleton * @access private * @static */ private static $_instance = null; /** * Constructeur de la classe * * @param void * @return void */ private function __construct() { } /** * Méthode qui crée l'unique instance de la classe * si elle n'existe pas encore puis la retourne. * * @param void * @return Singleton */ public static function getInstance() { if(is_null(self::$_instance)) { self::$_instance = new Singleton(); } return self::$_instance; } } ?>

http://www.apprendre-php.com/tutoriels/tutoriel-45-singleton-instance-unique-d-une-classe.html

Après je vois très facilement l'utilisation des Traits pour un Singleton, c'est ce que de nombreuses personnes ont fait...
https://github.com/chrisnharvey/PHP-Singleton-Trait/blob/master/Singleton.php
http://eddmann.com/posts/accessors-getter-setter-and-singleton-traits-in-php/
etc.

hugopb82, il y a 11 ans

Merci pour toutes ces précisions!
Hugo