Перегрузка PHP
В этом коде, это переопределение в классах-потомках получается?
<?php class A{ public $t = 5; protected $a = "<br>Алла<br>"; private $b = "Петя"; public function s($x1){ echo "Вызов родителя",$x1; echo $this->a,$this->b; } } class B extends A{ public function s($x1){ parent::s(NULL); } } class C extends B{ public function s($x1){ echo $this->a; } } $obj = new B; $obj->s(NULL); $obj = new C; $obj->s(NULL); ?> Почему перегрузка не пашет? |
Попробовал написать такой код, не выводит все три параметра почему-то. Я имею ввиду, второго перегруженного метода с именем m().
<?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 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-ий параметр"); ?> |
Часовой пояс GMT +3, время: 09:41. |