powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / PHP: Независимые статические методы в наследуемых синглтонах
8 сообщений из 8, страница 1 из 1
PHP: Независимые статические методы в наследуемых синглтонах
    #39104853
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
<?php

class base
{
	protected static $instance;
	public static function getInstance()
	{
		if (!isset(static::$instance))
		{
			$class = __CLASS__;
			static::$instance = new $class();
		}
		return static::$instance;
	}
}

class cls1 extends base {}

class cls2 extends base {}

$r1 = cls1::getInstance();
$r2 = cls2::getInstance();
var_dump($r1);
var_dump($r2);


Подскажите, что нужно сделать, чтобы $r1 и $r2 были инстансами классов cls1 и cls2 соответственно?
У меня есть базовый класс-синглтон и есть несколько наследуемых от него классов-синглтонов.
Мне нужно чтобы статические методы и переменные в наследуемых классах были независимыми.
Но при этом мне бы не хотелось переносить их из базового класса в наследуемые, т.к. код у них одинаковый.
________________________
Мы смотрим с оптимизмом...
...в оптический прицел.
...
Рейтинг: 0 / 0
PHP: Независимые статические методы в наследуемых синглтонах
    #39104856
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Замена __CLASS__ на get_called_class() по сути ничего не меняет.
Имя класса получается правильным, однако статический $instance одинаковый у обоих наследуемых классов, поэтому этот код в обоих строках выводит cls1.
...
Рейтинг: 0 / 0
PHP: Независимые статические методы в наследуемых синглтонах
    #39104862
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На сайте PHP в 9 комментарии подобный пример рассмотрен.
Но там используется статический хеш-массив с ключами get_called_class.
А нет ли другого способа?
...
Рейтинг: 0 / 0
PHP: Независимые статические методы в наследуемых синглтонах
    #39104875
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Такой код в принципе работает:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
<?php

class base
{
	protected static $instance = array();
	public static function getInstance()
	{
		$class = get_called_class();
		if (!isset(static::$instance[$class]))
		{
			static::$instance[$class] = new $class();
		}
		return static::$instance[$class];
	}
}

class cls1 extends base {}

class cls2 extends base {}

$r1 = cls1::getInstance();
$r2 = cls2::getInstance();
var_dump($r1);
var_dump($r2);



А возможно ли обойтись без хеш-массива?
У меня подобных методов больше одного.
...
Рейтинг: 0 / 0
PHP: Независимые статические методы в наследуемых синглтонах
    #39104887
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
гугли late static binding
...
Рейтинг: 0 / 0
PHP: Независимые статические методы в наследуемых синглтонах
    #39104893
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дали подсказку, сделал так:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
<?php

class base
{
	public static function getInstance()
	{
		static $instance;
		if (!isset($instance))
		{
			$instance = new static;
		}
		return $instance;
	}
}

class cls1 extends base {}

class cls2 extends base {}

$r1 = cls1::getInstance();
$r2 = cls2::getInstance();



По-моему это оптимально.
...
Рейтинг: 0 / 0
PHP: Независимые статические методы в наследуемых синглтонах
    #39105542
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторПо-моему это оптимально.
так уже лет 5 никто не делает. все на DI ушли.
...
Рейтинг: 0 / 0
PHP: Независимые статические методы в наследуемых синглтонах
    #39105543
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / PHP: Независимые статические методы в наследуемых синглтонах
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]