Есть два класса:
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();
както неправильно.
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
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'; (я так-же его заюзал)
Недавно возникла такая необходимость, узнать кто расширил этот класс.
Вот сейчас напомнили про 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, забыл его дописать к функции %)
спасибо, буду разбираться
спасибо, буду разбираться