[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Наследование
VolDroN
Такой вопрос.
Есть два класса:

class create
{
public function create()
{
return self::__construct()
}
}


и

class DB extends create
{
}


так вот, при вызове DB::create(); как в методе create получить имя класса для которого был вызван этот метод? Тоесть в этом случае DB?



Спустя 4 минуты, 9 секунд (14.11.2011 - 21:47) TMake написал(а):
class create
{
public function create()
{
echo get_class($this);
return self::__construct();
}
}

Спустя 2 минуты, 22 секунды (14.11.2011 - 21:49) TMake написал(а):
либо смотри в сторону __CLASS__

Спустя 40 минут, 7 секунд (14.11.2011 - 22:29) CyberOrcX написал(а):
getClassName уже не катит? )))

Спустя 2 часа, 17 минут, 13 секунд (15.11.2011 - 00:46) SlavaFr написал(а):
если php5.3 то используй вместо self:: static::
www.php.net/manual/en/language.oop5.static.php#104823

к стате
return self::__construct();
както неправильно.

Спустя 13 часов, 47 минут, 41 секунда (15.11.2011 - 14:34) VolDroN написал(а):
echo get_class($this); - нечего не выводит.
echo __CLASS__ - sCreate

Цитата
както неправильно.

я не тот код привёл в пример, просто хотел смысл передать:
class sCreate {
public function create()
{
$arg = func_get_args();
if($count = count($arg))
{
$args = implode(', ', $arg);
$obj = eval('self::__construct('.$args.');');
return $obj;
}
else
{
$obj = self::__construct();
}
}
}


class DB extends sCreate {
private $table;
private $query;

public function __construct($table)
{
$this->table = $table;
}
...

Спустя 1 минута, 49 секунд (15.11.2011 - 14:36) VolDroN написал(а):
CyberOrcX
static className = 'DB';


не хотел использовать, думаю есть лучшее решение

Спустя 1 час, 35 минут, 49 секунд (15.11.2011 - 16:12) Zerstoren написал(а):
Попробуйте еще раз по экспериментировать с get_class($this).

Недавно возникла такая необходимость, узнать кто расширил этот класс.
Вот сейчас напомнили про get_class и отлично все заработало и без
static className = 'DB'; (я так-же его заюзал)




Спустя 8 минут, 31 секунда (15.11.2011 - 16:20) caballero написал(а):
для статика get_called_class()

Спустя 16 часов, 28 минут, 37 секунд (16.11.2011 - 08:49) linker написал(а):
static::, get_called_class() работают от PHP 5.3.x. Но тут все ужасно. Во-первых, метод create() должен быть статическим, дабы его можно было вызвать как DB::create(). Любые ссылки на $this в статическом методе или вызванном как статический приведут к фатальной ошибке. Во-вторых, название метода класса create совпадает с названием класса, а значит является его конструктором. Конструктор не может быть статическим методом, а значит self::__construct() является ошибкой. Конструктор можно вызывать похожим образом только через parent::__construct(). В-третьих тут на лицо банальная фабрика, поэтому ТС нужно почитать что это такое и реализовать у себя.

Спустя 42 минуты, 45 секунд (16.11.2011 - 09:32) VolDroN написал(а):
linker про static, забыл его дописать к функции %)

спасибо, буду разбираться
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.