class Singleton {
private static $instances = [];
public static function getInstance() {
if(!isset(self::$instances[static::class])) {
self::$instances[static::class] = new static;
}
return self::$instances[static::class];
}
protected function __construct() { }
protected function __clone() { }
protected function __wakeup() { }
}
Какой возвращаемый тип должен быть для getInstance
public static function getInstance() : self
// или
public static function getInstance() : static::class // и можно ли так делать?
Этот класс предполагается использовать для наследования другими классами, в которых нужен один объект (например logger).
Можно ли для этого сделать этот класс абстрактным, т.к. самостоятельно этот класс не имеет смысла ? Правильно понимаю, что для этого нужно просто добавитьabstract
и ничего в классе менять не нужно?
Не получится у тебя указать тип возвращаемого значения, тут generics нужны, а в php их пока что нет :)
Logger logger = Singleton.getInstance<Logger>();
abstract class Singleton<T>{
public static T getInstance(){
// ...
}
}
Вот так было бы в java к примеру. В PHP придется не указывать тип возвращаемого значения, либо реализовать какой нибудь костыль по типу
protected static function _getInstance(string $class)
{
if(!isset(self::$instances[static::class])) {
self::$instances[static::class] = new static;
}
return self::$instances[static::class];
}
и в дочерних реализовывать метод
public static function getInstance(): self
{
return parent::_getInstance();
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Есть задача: реализовать некоторое подобие метрики\аналитики посетителей сайта
Всем приветЕсть такая схема сайта: интерфейс пользователя(он же фронт) -=> back-end этого фронта -=> api
В лекции JavaRush «Реализации интерфейса Set, Queue» говорится следующее: