Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Не работает метод __call()
 
 автор: romantik2011   (03.08.2011 в 20:33)   письмо автору
 
 

овал написать такой код, не выводит все три параметра почему-то. Я имею ввиду, второго перегруженного метода с именем m().
[code=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 />");

?>

  Ответить  
 
 автор: cheops   (03.08.2011 в 22:28)   письмо автору
 
   для: romantik2011   (03.08.2011 в 20:33)
 

Вы хотите перегрузку методов сделать по параметрам? Так не получиться... самый простой вариант реализовать метод с тремя параметрами, сделав третий - необязательным. В зависимости от его значения принимать ту или иную логику. В этом плане ООП в PHP не очень сильный.

  Ответить  
 
 автор: romantik2011   (03.08.2011 в 22:39)   письмо автору
 
   для: cheops   (03.08.2011 в 22:28)
 

Если так написать всё выводит, но масив не выводит никак.

<?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){
         echo 
$f.' ';
        }
    }
 
    
}
$x = new D;
$p = array("Динозавр","Аладин",954);
$g = array("Ура!");

$x->m($p,"2-ой параметр<br />");
$x->s($g,"Санчо","3-ий параметр");

?>



Результат:
Динозавр Аладин 954 2-ой параметр
Array Санчо 3-ий параметр

  Ответить  
 
 автор: romantik2011   (03.08.2011 в 23:07)   письмо автору
 
   для: romantik2011   (03.08.2011 в 22:39)
 

А почему только вот так сработало? Почему без внутреннего цикла не запахало и без всяких проверок и приведений типов?
Кто-нибудь подскажет как реализовать не так громоздко цикл форич?

<?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-ий параметр");
 
?>

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования