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
Réponse acceptée

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
Réponse acceptée
<?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
Réponse acceptée

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
Auteur

Merci pour toutes ces précisions!
Hugo