Попробовал написать такой код, не выводит все три параметра почему-то. Я имею ввиду, второго перегруженного метода с именем m(). PHP: <?php class D{ function m($p1,$p2){ for($i=0; $i<count($p1); $i++) echo $p1[$i].' '; echo ' '.$p2; } function __call($n,$v) { foreach($v as $z=>$f){ echo $v. ' '.$f; } } } $x = new D; $p = array("Динозавр","Аладин",954); $g = array("Ура!"); $x->m($p,"2-ой параметр<br />"); $x->m($g,"Санчо","3-ий параметр<br />"); ?>
А почему только вот так сработало? Почему без внутреннего цикла не запахало и без всяких проверок и приведений типов? Кто-нибудь подскажет как реализовать не так громоздко цикл форич? PHP: <?php class D{ function m($p1,$p2){ for($i=0; $i<count($p1); $i++) echo $p1[$i].' '; echo ' '.$p2; } function __call($n,$v) { foreach($v as $f){ if ((string)$f == "Array") foreach($f as $v) { echo $v; } else echo $f.' '; } } } $x = new D; $p = array("Динозавр","Аладин",954); $g = array("Ура!"); $x->m($p,"2-ой параметр<br />"); $x->s($g,"Санчо","3-ий параметр"); ?>
а что собственно хочется сделать? если это просто сферический пример в вакууме, я бы предложил оставить "разбор полётов" до момента возникновения необходимости в магических функциях (__call(), __set(), __get()).
romantik2011 тебя не смущает, то что __call() работает только тогда, когда происходит вызов несуществующего метода, и то, что в первом примере ты вызываешь 2 раза существующий метод, а во втором примере - происходит вызов уже несуществующего?