Оказывается, что спецификация некоторых функций для работы с классами не достаточно точна
ru2.php.net/manual/ru/function.is-subclass-of.php
is_subclass_of — Returns TRUE if the object has this class as one of its parents
bool is_subclass_of ( object object, string class_name);
Эта функция отлично работает и с именем класса.
например, так можно посмотреть все дочерние классы:
Хотя я так не советую делать, но я слышал, что некоторым хотелось видеть пример этого хака, надеюсь вы найдете способ обойтись без него ;-)
get_parent_class — Возвращает имя класса базового для объекта или класса
string get_parent_class ( mixed $obj )
Тут честно сказано, что аргумент смешанного типа, но многие (сужу по своим приятелям) не обращают на это внимание. Эта функция так же работает чудесно с именем класса.
удивила работа функции method_exists();
ответ:
bool(true)
bool(true)
то есть она действительно смотрит есть ли метод для создаваемых объектов, а не для класса.
конечно, функция противоречит идеологии интерфейсов, но иногда ей очень удобно пользоваться.
call_user_method не потерпит извращений:
прошу воспринимать топик как напоминание, может дискуссию
ru2.php.net/manual/ru/function.is-subclass-of.php
is_subclass_of — Returns TRUE if the object has this class as one of its parents
bool is_subclass_of ( object object, string class_name);
Эта функция отлично работает и с именем класса.
например, так можно посмотреть все дочерние классы:
function getClassChildren($parentClassName) { $result = array(); foreach (get_declared_classes() as $className) { if (is_subclass_of(strtolower($className), $parentClassName) or $className == $parentClassName) $result[] = $className; } return $result; }
Хотя я так не советую делать, но я слышал, что некоторым хотелось видеть пример этого хака, надеюсь вы найдете способ обойтись без него ;-)
get_parent_class — Возвращает имя класса базового для объекта или класса
string get_parent_class ( mixed $obj )
Тут честно сказано, что аргумент смешанного типа, но многие (сужу по своим приятелям) не обращают на это внимание. Эта функция так же работает чудесно с именем класса.
удивила работа функции method_exists();
<? class A{ private $a1="test"; public $a2="tt"; static public function aa(){} } class B extends A { static public function bb(){} } $a=new A; var_dump( method_exists("A",'aa')); $b=new B; var_dump( method_exists("B",'aa')); ?>
ответ:
bool(true)
bool(true)
то есть она действительно смотрит есть ли метод для создаваемых объектов, а не для класса.
конечно, функция противоречит идеологии интерфейсов, но иногда ей очень удобно пользоваться.
call_user_method не потерпит извращений:
<? class A{ static public function aa(){ echo 'aaa'; } } call_user_method ('aa', 'A'); ?>Ответом вам будет Fatal error: Only variables can be passed by reference
прошу воспринимать топик как напоминание, может дискуссию