За последние 24 часа нас посетил 54321 программист и 1776 роботов. Сейчас ищут 984 программиста ...

Не работает метод __call()

Тема в разделе "PHP для новичков", создана пользователем romantik2011, 3 авг 2011.

  1. romantik2011

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

    С нами с:
    23 июл 2011
    Сообщения:
    26
    Симпатии:
    0
    Попробовал написать такой код, не выводит все три параметра почему-то. Я имею ввиду, второго перегруженного метода с именем m().
    PHP:
    1.  
    2. <?php
    3. class D{
    4. function m($p1,$p2){
    5.         for($i=0; $i<count($p1); $i++)
    6.         echo $p1[$i].' ';
    7.         echo ' '.$p2;
    8.     }
    9. function __call($n,$v)  {
    10.         foreach($v as $z=>$f){
    11.             echo $v. ' '.$f;
    12.         }
    13.     }
    14.  
    15.    
    16. }
    17. $x = new D;
    18. $p = array("Динозавр","Аладин",954);
    19. $g = array("Ура!");
    20.  
    21. $x->m($p,"2-ой параметр<br />");
    22. $x->m($g,"Санчо","3-ий параметр<br />");
    23.  
    24. ?>
    25.  
    26.  
     
  2. romantik2011

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

    С нами с:
    23 июл 2011
    Сообщения:
    26
    Симпатии:
    0
    А почему только вот так сработало? Почему без внутреннего цикла не запахало и без всяких проверок и приведений типов?
    Кто-нибудь подскажет как реализовать не так громоздко цикл форич?
    PHP:
    1.  
    2. <?php
    3. class D{
    4. function m($p1,$p2){
    5.         for($i=0; $i<count($p1); $i++)
    6.         echo $p1[$i].' ';
    7.         echo ' '.$p2;
    8.     }
    9.    
    10. function __call($n,$v)  {
    11.         foreach($v as $f){
    12.          if ((string)$f == "Array")
    13.              foreach($f as $v)
    14.              {
    15.                 echo $v;
    16.              }
    17.           else echo $f.' ';
    18.         }
    19.     }
    20.      
    21. }
    22. $x = new D;
    23. $p = array("Динозавр","Аладин",954);
    24. $g = array("Ура!");
    25.  
    26. $x->m($p,"2-ой параметр<br />");
    27. $x->s($g,"Санчо","3-ий параметр");
    28.  
    29. ?>
    30.  
     
  3. iliavlad

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

    С нами с:
    24 янв 2009
    Сообщения:
    1.689
    Симпатии:
    4
    а что собственно хочется сделать?

    если это просто сферический пример в вакууме, я бы предложил оставить "разбор полётов" до момента возникновения необходимости в магических функциях (__call(), __set(), __get()).
     
  4. Апельсин

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

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    romantik2011
    тебя не смущает, то что __call() работает только тогда, когда происходит вызов несуществующего метода, и то, что в первом примере ты вызываешь 2 раза существующий метод, а во втором примере - происходит вызов уже несуществующего?