Il problema non è solo di __CLASS__
anche self è riferito alla classe dove il metodo è dichiarato, ergo in questo empio, self::$_instance sarà sempre una sola per tutti, e non è utilizzabile come Singleton:
codice:
<?php
class Singleton {
    public static  $_instance;
    public static function getInstance() {
        self::$_instance = rand();
    }
}

class A extends Singleton {}

class B extends Singleton {}

A::getInstance();
echo Singleton::$_instance.'
';
B::getInstance();
echo Singleton::$_instance.'
';
echo A::$_instance.'
';
echo B::$_instance.'
';
?>
[edit]
ovviamente se ridichiari $_instance come static di ogni classe il problema non sussiste.
Ma se devi fare questo, tanto vale attendere lazy binding, oppure usare alternative più semplici, tipo quella del Singleton Factory postata sopra