Существует шаблон проектирования под названием Singleton. Короче говоря:
Измените __construct и __clone на private, поэтому вызов нового TestClass () приведет к ошибке!
Теперь создайте класс, который создаст новый экземпляр вашего объекта или вернет существующий ...
Пример:
abstract class Singleton
{
final private function __construct()
{
if(isset(static::$instance)) {
throw new Exception(get_called_class()." already exists.");
}
}
final private function __clone()
{
throw new Exception(get_called_class()." cannot be cloned.");
}
final public static function instance()
{
return isset(static::$instance) ? static::$instance : static::$instance = new static;
}
}
Затем попробуйте расширить этот класс и определить статическую переменную $ instance
class TestClass extends Singleton
{
static protected $instance;
// ...
}
Теперь попробуйте это:
echo get_class($myinstance = TestClass::instance();
echo get_class($mysecondinstance = TestClass::instance());
Готово