За последние 24 часа нас посетили 97858 программистов и 3004 робота. Сейчас ищет 1391 программист ...

Вызов функции, класса с юрла

Тема в разделе "PHP для новичков", создана пользователем PetrOFF, 13 май 2009.

  1. PetrOFF

    PetrOFF Активный пользователь

    С нами с:
    13 май 2009
    Сообщения:
    102
    Симпатии:
    0
    Подскажите пожалуйста каким образом, можно вызвать функцию, єкземпляр класса взяв ее имя из сегмента юрла. Потипу фремворка CI.
    Тоесть www.test.ru/class/function/param/param/param
    парсим юрла, получаем имя экземпляра класса и функции, а дальше?
     
  2. GudGuy

    GudGuy Активный пользователь

    С нами с:
    14 июн 2007
    Сообщения:
    909
    Симпатии:
    0
    Адрес:
    Москва
    не уверне, но наверняка можно с помощью eval
     
  3. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
  4. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    но вообще это неочень как-то
    лучше вызвать класс, метод, а параметры пусть сам метод берёт какие надо
     
  5. PetrOFF

    PetrOFF Активный пользователь

    С нами с:
    13 май 2009
    Сообщения:
    102
    Симпатии:
    0
    а вызвать метод класса удастя этой функцией?
    call_user_func('$obj->method','param'); ???? Шось как-то не так :(
     
  6. Cron

    Cron Активный пользователь

    С нами с:
    10 июл 2008
    Сообщения:
    289
    Симпатии:
    0
    Адрес:
    Украина, Сумы
    доку внимательно читайте:
    PHP:
    1. call_user_func(array($classname, $method));
     
  7. PetrOFF

    PetrOFF Активный пользователь

    С нами с:
    13 май 2009
    Сообщения:
    102
    Симпатии:
    0
    Таки да, в моем мануале это не описывалось :(
     
  8. PetrOFF

    PetrOFF Активный пользователь

    С нами с:
    13 май 2009
    Сообщения:
    102
    Симпатии:
    0
    :( И все же..... как вызвать юзерский, класс а в нем метод и даже как передать аргументы методу я разобрался. Но вот как релизовать передачу аргументов по-типу как фремворке codeigniter?
    Получается юзер создает класс метод, прописывает в нем аргументы, а CI сам фомирует call_user_func(array($url[0],$url[1]),$arg,$arg1,$arg2.......);
     
  9. PetrOFF

    PetrOFF Активный пользователь

    С нами с:
    13 май 2009
    Сообщения:
    102
    Симпатии:
    0
    Ув. гуру я застрял.
    Не могу понять как можно преобразовать url www.site.ru/class/method/param/param/param..... для использования в call_user_func. Тоесть как вызвать класс-метод понятно, а вот как сделать передачу аргументов не прописывая их в ручную?
     
  10. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    PetrOFF
    REQUEST_URI
     
  11. PetrOFF

    PetrOFF Активный пользователь

    С нами с:
    13 май 2009
    Сообщения:
    102
    Симпатии:
    0
    шото я не так обрисовываю проблему :(
     
  12. PetrOFF

    PetrOFF Активный пользователь

    С нами с:
    13 май 2009
    Сообщения:
    102
    Симпатии:
    0
    Вобшем вот так решил проблему
    Код (Text):
    1. call_user_func_array(array($url[0],$url[1]),array_slice($url,1));
     
  13. PetrOFF

    PetrOFF Активный пользователь

    С нами с:
    13 май 2009
    Сообщения:
    102
    Симпатии:
    0
    Вот те раз, вызываю из сласс1 метод1 клаас2 с помошью call_user_func_array, все работает. Но не получается из метода вызвать другой метод этого же класса

    Код (Text):
    1.  
    2. class1
    3. ...
    4. call_user_func_array(array(class2,method),param);
    5. ...
    6.  
    7. class2
    8.  
    9. function method{
    10.  
    11. $this->method1(); Здесь выскакивает ошибка Fatal error: Using $this when not in object context in "уу" on line 157
    12.  
    13. }
    14.  
    15. function method1{
    16. .....
    17. }
     
  14. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    сдается мне, что проектирование модели классов уперлось в непонимание основ проектирования как такового и ООП вообще.
     
  15. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда

    PHP:
    1.  
    2. <?php
    3.  
    4. class auth {
    5.      private function login() {
    6.      }
    7.      public function Run($method) {
    8.            $this->$method();
    9.      }
    10. }
    11.  
    12. $class = 'auth';
    13. $method = 'login';
    14.  
    15. $call = new $class();
    16. $call->Run($method);
    17.  
    18. ?>
    19.  

    живой пример

    PHP:
    1.  
    2. <?php
    3.  
    4. class EnigmaCZ extends EnigmaAtom {
    5.  
    6.     var $file       = false;
    7.     var $methods    = array();
    8.  
    9.     var $http       = false;
    10.  
    11.     function __construct() {
    12.  
    13.         $this->http = EnigmaHTTPRequest::GetInstance();
    14.  
    15.         $this->AddMethod();
    16.     }
    17.  
    18.     protected function AddMethod($name='draw',$method='Draw') {
    19.         $this->methods[$name] = $method;
    20.     }
    21.  
    22.     public function Run($name='draw') {
    23.  
    24.         if( isset($this->methods[$name]) ) {
    25.             $method = $this->methods[$name];
    26.             return $this->$method();
    27.         } else {
    28.             $this->Error('нет такого метода ['.$name.']');
    29.         }
    30.  
    31.     }
    32.  
    33.     protected function Draw() {
    34.  
    35.         $tpl = $this->GetTemplate();
    36.         $html = $tpl->Parse('INDEX');
    37.  
    38.         return $html;
    39.  
    40.     }
    41.  
    42.  
    43.     protected function FastName() {
    44.  
    45.         return str_replace('enigmacz','',$this);
    46.  
    47.     }
    48.  
    49.     protected function GetTemplate() {
    50.  
    51.         $realpath = dirname($this->file);
    52.  
    53.         return new EnigmaTPLS($realpath.'/'.$this->FastName().'.html');
    54.     }
    55.  
    56. }
    57.  
    58. ?>
    59.  
     
  16. PetrOFF

    PetrOFF Активный пользователь

    С нами с:
    13 май 2009
    Сообщения:
    102
    Симпатии:
    0
    хм, получается, передовать в класс, по ссылке другой класс и тем более создавать в классе, другой класс это плохой код? Я просто не раз видел такие конструкции в чужом коде
    Код (Text):
    1.  $this->class->method