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!
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.
<?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();
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.