Le singleton est une technique qui permet de s'assurer de l'unicité de l'instance d'une classe dans toute l'application. Bien. Mais le singleton permet bien plus que cela. Il facilite grandement la communication inter-objets. Voyons tout de suite comment mettre en place le singleton.

class DatabaseAccess {

    function &getInstance() {

        static $i;

        if (!isset($i)) {

            $i = new DatabaseAccess();

        }

        return $i;

    }

}

$db1 = & DatabaseAccess::getInstance();
$db2 = & DatabaseAccess::getInstance();

On définit donc une méthode qui sert à récuérer l'instance de la classe. On store cette instance dans une variable statique, qui sera donc la même à chaque appel de la méthode. Les variables $db1 et $db2 font donc référence au même objet. L'avantage, c'est que la méthode getInstance est disponible depuis n'importe où dans l'application. Ainsi, pour récupérer l'instance de l'objet DatabaseAccess dans une autre classe, il suffit d'utiliser DatabaseAccess::getInstance().

class foo {

        function foo() {

                $this->dba = DatabaseAccess::getInstance();

        }

}

$foo->dba est une référence vers le même objet que $db1 et $db2. Adieu les passage par référence en argument :)

Pour plus d'informations sur le singleton, et sur les Design Patterns en général, je ne peux que vous conseiller l'excellent site phppatterns d'Harry Fueck.