Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Для профи > Возможно ли узнать если метод требует параметров??


Автор: Shogun 17.6.2010, 02:38
Здравствуйте!

Прочитал не мало доков и не нашел ничего такого но все-таки решил спросить...

Есть класс:

Код

class Class extends BaseClass
  {
    public function method($param1='', $param2=array(), $param3=NULL)
      {
        #...
      }
  }


проверка:
Код

if (class_exists('Class'))
  {
    if (method_exists('Class', 'method'))
      {
        #Ну и тут нужно както узнать требуемые параметры и их тип для этого класса ??
        #Чтото такое...
        $method_params = get_method_params('Class', 'method');
      }
  }


Возможно ли это??

И еще маленький вопрос:
Возможно ли узнать имя базового класса который расширен в данном случае классом 'Class'??
знаю про get_parrent_class('Class'); который вернет 'BaseClass'
НО - это нужно сделать при том что файл в котором находятся бызовый класс 'BaseClass' еще не импортирован...
А так получаем ошибку об не существовании этого класса (BaseClass)...

Спасибо.


Автор: ksnk 17.6.2010, 06:39
Цитата(Shogun @  17.6.2010,  02:38 Найти цитируемый пост)
Прочитал не мало доков

есть еще reflection. не оно?

задачу нужно прояснить. Откуда возникла потребность вызывать неизвестную функцию с неизвестным количеством параметров?

Автор: Shogun 17.6.2010, 12:21
Цитата(ksnk @ 17.6.2010,  06:39)
есть еще reflection. не оно?

задачу нужно прояснить. Откуда возникла потребность вызывать неизвестную функцию с неизвестным количеством параметров?

ksnk - спасибо большое, мне как-то не повезло наткнутся на Reflection =)) то что надо.

А Вы не знаете как с производительностью Reflection если придется использовать частенько?? 

И можно ли решить второй вопрос??

спасибо.

Автор: Fortop 17.6.2010, 14:40
Цитата(Shogun @  17.6.2010,  02:38 Найти цитируемый пост)
Возможно ли узнать имя базового класса который расширен в данном случае классом 'Class'??
знаю про get_parrent_class('Class'); который вернет 'BaseClass'
НО - это нужно сделать при том что файл в котором находятся бызовый класс 'BaseClass' еще не импортирован...
А так получаем ошибку об не существовании этого класса (BaseClass)...

Да? Странно...
Это явно чья-то недоработка из команды PHP.

А почему вам не захотелось подключить Class не подключая BaseClass?
Что? Тоже не получилось? К чему бы это? smile

P.S. откуда такие бредовые идеи с вопросами?

Автор: Shogun 17.6.2010, 15:46
Цитата(Fortop @ 17.6.2010,  14:40)
Да? Странно...
Это явно чья-то недоработка из команды PHP.

А почему вам не захотелось подключить Class не подключая BaseClass?
Что? Тоже не получилось? К чему бы это? smile

P.S. откуда такие бредовые идеи с вопросами?

Умник... видимо и твой статус "Эксперт" не наследует твои знания или адекватность а количество "мега-гуру-умных" постов на форуме... 
ладно проехали и ты в игнор...


для адекватных ...

Есть 2 файла с классами:

BaseClass.php
Код

class BaseClass
  {
    #содержание класса...
  }

Class.php
Код

class Class extends BaseClass
  {
    #содержание класса...
  }


В главном фаиле index.php
Код

require 'Class.php';

#тут как-то нужно отключить или перехватить ошибку об не существовании базового класса
#и получить его имя
$base_class = get_base_class_name('Class'); #Чтото такое

#ну и импортировать его фаил
require $base_class.'.php';

#дальше уже нормальная работа с классом
$class = new Class();


Есть идеи?? 


Автор: ksnk 17.6.2010, 16:13
http://ru.php.net/autoload?

Автор: Shogun 17.6.2010, 16:43
Цитата(ksnk @ 17.6.2010,  16:13)
http://ru.php.net/autoload?

ksnk - нет... autoload тут поможет загрузить только фаил для 'Class' а нужно чтобы он загрузил и базовый класс, имя котого не известно... понимаете о чем я??

Автор: skyboy 17.6.2010, 16:48
Цитата(Shogun @  17.6.2010,  15:43 Найти цитируемый пост)
а нужно чтобы он загрузил и базовый класс, имя котого не известно... понимаете о чем я?? 

ну, так в коде же написано:
Цитата

...extends BaseClass

неужель ты думаешь, что в масштабных фреймворках только "конечные" по иерархии классы подключаются autoload'ом, а все базовые надо подключать вручную?  smile 

Автор: Shogun 17.6.2010, 17:09
Цитата(skyboy @ 17.6.2010,  16:48)
Цитата(Shogun @  17.6.2010,  15:43 Найти цитируемый пост)
а нужно чтобы он загрузил и базовый класс, имя котого не известно... понимаете о чем я?? 

ну, так в коде же написано:
Цитата

...extends BaseClass

неужель ты думаешь, что в масштабных фреймворках только "конечные" по иерархии классы подключаются autoload'ом, а все базовые надо подключать вручную?  smile

Оххх... smile спасибо ksnk и skyboy. =)) с этим понятно... 


Тему вроде можно закрыть... ;)

Автор: MoLeX 18.6.2010, 05:31
Shogun, не груби. Fortop на счет mvc oruter прав!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)