Наследование и и проблема с Singleton

Gremboloid

инженера Гр...
Я правильно понял, что programmer_2006 использует класс B только для реализации паттерна синглтона?
 

Lews

Новичок
Автор оригинала: флоппик
zerkms, я к тому, что в php нельзя ни вернуть данные из конструктора, ни обработать ошибку недоступного конструктора. Вот это был бы правильный синглетон. Поэтому, можно просто с таким же успехом в публичном конструкторе делать die().
Прошу прощения.... Перечитал кучу раз, не могу понять..
Зачем возвращать данные из недоступного конструктора и обрабатывать его ошибку (что за ошибка?)? И почему от этого он станет правильным?
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Потому что тогда тебе не нужно было бы знать синглтон он или нет. Он бы из конструктора возвращал свой инстанс, и все.
 

Lews

Новичок
Это чтобы не писать

object::GetInstance()->DoSomethig();,

а писать

$obj = new object();
$obj->DoSomething(); ?
 

Major

Новичок
[flood]

Точно, надо ввести еще два magic-метода: __beforeConstruct() и __afterConstruct() !
Надо вообще так развить язык, чтобы там были одни маджик методы на все случаи жизни. И будет пхп самым магическим языком.

И тогда термин "уличная магия" обретет в программировании своё место.

[/flood]
 

Иван 76

Новичок
Я тут недавно наткнулся в интернете на решение подобного вопроса.
Решение немного матюковое, но рабочее.

http://php.webconsulting.by/2008/05/08/zend_dbchast-2-ispolzovanie-zend_db_table/

PHP:
class CyEngine_Db_Table extends Zend_Db_Table_Abstract
{
	protected static $_instances;
 
	/**
	* Returns an instance of CyEngine_Db_Table
	*
	* Singleton pattern implementation
	* 
	* @return CyEngine_Db_Table
	*/
	public static function getInstance()
	{
	$bt = debug_backtrace();
	$class = $bt[1]['class'];
	if (!isset(self::$_instances[$class])) {
		self::$_instances[$class] = new $class();
	}
	return self::$_instances[$class];
	}
}
-~{}~ 02.11.08 20:04:

Вот еще подобные решения
http://docs.php.net/manual/ru/language.oop5.patterns.php#85582
http://docs.php.net/manual/ru/language.oop5.patterns.php#82985
http://docs.php.net/manual/ru/language.oop5.patterns.php#82619
 
Сверху