Le concept de base et d'interdire toute instanciation de la classe par ce type de code :

<?php
$firstClassInstance     
= new SingletonClass();
$secondClassInstance    = new SingletonClass();
?>

Pour ce faire, nous allons rendre "privé" le constructeur de notre classe (oui, c'est possible), ce qui nous donne quelque chose comme ça :

<?php
class SingletonClass {

    private function 
__construct()
    {}

}
?>

Très bien. Maintenant, il va quand même falloir l'instancier une (et une seule) fois, cette classe ! C'est la que les méthodes et propriétés statiques viennent à notre secours. Nous allons stocker, dans une propriété statique et privée de notre classe une instance d'elle même, que nous allons distribuer, en l'instanciant si elle est nulle (au premier appel donc). Voici le code :

<?php
/**
 * Démonstration du design pattern Singleton
 *
 * @author bruno.vibert
 */
class SingletonClass {

    
/**
     *
     * @var SingletonClass
     */
    
private static $_instance;

    private function 
__construct()
    {}

    
/**
     * Récupère l'instance de la classe
     *
     * @return SingletonClass
     */
    
public static function getInstance()
    {
        if( 
true === is_nullself::$_instance ) )
        {
            
self::$_instance = new self();
        }

        return 
self::$_instance;
    }
}

?>

Le tour est joué ! Pour accéder à l'instance de la classe dans votre code :

<?php
$firstClassInstance    
SingletonClass::getInstance();
$sameClassInstance    SingletonClass::getInstance();
?>