Я не могу воспроизвести вашу проблему:
var_dump(C1::getInstance());
var_dump(C2::getInstance());
дает:
object(C1)#1 (0) {
}
object(C2)#2 (0) {
}
Как показывает вывод var_dump
, типы различаются (C1
, затем C2
). Помните, что вам нужно вызывать getInstance()
статически, так как это статическая функция.
Кроме того, если вы хотите реально реализовать шаблон Singleton в PHP, в вашем абстрактном классе отсутствуют некоторые важные определения методов, чтобы сделать это более точным с помощью PHP. См. Шаблоны & PHP Руководство .
Также в PHP вам, как правило, вообще не нужен Singleton, вместо этого вставляйте зависимости, что сделает ваш код более свободным.
Надеюсь, это полезно.