Подскажите пожалуйста каким образом, можно вызвать функцию, єкземпляр класса взяв ее имя из сегмента юрла. Потипу фремворка CI. Тоесть www.test.ru/class/function/param/param/param парсим юрла, получаем имя экземпляра класса и функции, а дальше?
но вообще это неочень как-то лучше вызвать класс, метод, а параметры пусть сам метод берёт какие надо
а вызвать метод класса удастя этой функцией? call_user_func('$obj->method','param'); ???? Шось как-то не так
И все же..... как вызвать юзерский, класс а в нем метод и даже как передать аргументы методу я разобрался. Но вот как релизовать передачу аргументов по-типу как фремворке codeigniter? Получается юзер создает класс метод, прописывает в нем аргументы, а CI сам фомирует call_user_func(array($url[0],$url[1]),$arg,$arg1,$arg2.......);
Ув. гуру я застрял. Не могу понять как можно преобразовать url www.site.ru/class/method/param/param/param..... для использования в call_user_func. Тоесть как вызвать класс-метод понятно, а вот как сделать передачу аргументов не прописывая их в ручную?
Вобшем вот так решил проблему Код (Text): call_user_func_array(array($url[0],$url[1]),array_slice($url,1));
Вот те раз, вызываю из сласс1 метод1 клаас2 с помошью call_user_func_array, все работает. Но не получается из метода вызвать другой метод этого же класса Код (Text): class1 ... call_user_func_array(array(class2,method),param); ... class2 function method{ $this->method1(); Здесь выскакивает ошибка Fatal error: Using $this when not in object context in "уу" on line 157 } function method1{ ..... }
сдается мне, что проектирование модели классов уперлось в непонимание основ проектирования как такового и ООП вообще.
PHP: <?php class auth { private function login() { } public function Run($method) { $this->$method(); } } $class = 'auth'; $method = 'login'; $call = new $class(); $call->Run($method); ?> живой пример PHP: <?php class EnigmaCZ extends EnigmaAtom { var $file = false; var $methods = array(); var $http = false; function __construct() { $this->http = EnigmaHTTPRequest::GetInstance(); $this->AddMethod(); } protected function AddMethod($name='draw',$method='Draw') { $this->methods[$name] = $method; } public function Run($name='draw') { if( isset($this->methods[$name]) ) { $method = $this->methods[$name]; return $this->$method(); } else { $this->Error('нет такого метода ['.$name.']'); } } protected function Draw() { $tpl = $this->GetTemplate(); $html = $tpl->Parse('INDEX'); return $html; } protected function FastName() { return str_replace('enigmacz','',$this); } protected function GetTemplate() { $realpath = dirname($this->file); return new EnigmaTPLS($realpath.'/'.$this->FastName().'.html'); } } ?>
хм, получается, передовать в класс, по ссылке другой класс и тем более создавать в классе, другой класс это плохой код? Я просто не раз видел такие конструкции в чужом коде Код (Text): $this->class->method