Помощник
|
Эмуляция перегрузки в PHP, метод __call() |
romantik2011
|
Сообщение
#1
|
||
|
|
||
|
|||
Mulder_hb |
30.7.2011, 11:57;
Ответить: Mulder_hb
Сообщение
#2
|
|
Потому что метод __call у вас даже не вызывается. Во всех случаях вызывается самый первый метод t($m), которому всегда передается лишь первый аргумент, остальные, если есть, отбрасываются.
|
|
|
romantik2011
|
Сообщение
#3
|
|
А как правильно сделать чтоб было похоже на перегрузку?
|
|
|
Mulder_hb |
30.7.2011, 17:56;
Ответить: Mulder_hb
Сообщение
#4
|
|
Есть много способов. Самый простой:
[PHP]<?php class A { public function t() { $argc = func_num_args(); $argv = func_get_args(); switch ($argc) { case 1: call_user_func_array(array($this, 't1'), $argv); break; case 2: call_user_func_array(array($this, 't2'), $argv); break; case 3: call_user_func_array(array($this, 't3'), $argv); break; default: $this->t0(); } } private function t1($arg) { echo '1: ' . $arg . PHP_EOL; } private function t2($arg1, $arg2) { echo '2: ' . $arg1 . ' ' . $arg2 . PHP_EOL; } private function t3($arg1, $arg2, $arg3) { echo '3: ' . $arg1 . ' ' . $arg2 . ' ' . $arg3 . PHP_EOL; } private function t0() { echo 'empty' . PHP_EOL; } } $a = new A; $a->t('Вася'); $a->t('Вася', 'Пупкин'); $a->t();[/PHP] |
|
|
alexdrob |
30.7.2011, 22:35;
Ответить: alexdrob
Сообщение
#5
|
|
А как правильно сделать чтоб было похоже на перегрузку? вам же уже писали http://www.html.by/threads/20237-Peregruzk...ll=1#post120132 http://www.html.by/threads/20237-Peregruzk...ll=1#post120211 |
|
|
romantik2011
|
Сообщение
#6
|
|
Попробовал написать такой код, не выводит все три параметра почему-то. Я имею ввиду, второго перегруженного метода с именем 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] |
|
|
alexdrob |
3.8.2011, 20:33;
Ответить: alexdrob
Сообщение
#7
|
|
вы читаете что вам пишут?
вам ответили Потому что метод __call у вас даже не вызывается. Во всех случаях вызывается самый первый метод t функция __call вызывается когда? когда не найдена функция по имени, а у вас есть функция m так почему тогда __call должна вызываться если функция m есть? |
|
|
romantik2011
|
Сообщение
#8
|
|
Ясно, но почему-то цикл фор-ич не подставил значения.
Я изменил вот эту строку: [PHP]$x->m($g,"Санчо","3-ий параметр");[/PHP] на эту [PHP]$x->s($g,"Санчо","3-ий параметр");[/PHP] Получил такой результат: Динозавр Аладин 954 2-ой параметр Array ArrayArray СанчоArray 3-ий параметр Почему форич значения не подстаивл, а вывалил всё Array вместо значений? |
|
|
alexdrob |
3.8.2011, 20:56;
Ответить: alexdrob
Сообщение
#9
|
|
У вас ехо выводит переменную v пробел потом значение массива.
Все правильно вам вывелось |
|
|
romantik2011
|
Сообщение
#10
|
|
Значение массива не выводит, выводит вместо значения просто слово Array
|
|
|
|
Похожие темы
Тема | Ответов | Автор | Просмотров | Последний ответ | |
---|---|---|---|---|---|
СОЗДАНИЕ : / САЙтЫ / ЛЕНДЫ / БОТЫ ТГ / ВАЙТЫ / КРЕО / СОФТЫ / ДИЗАЙН [PHP, JS, HTML/CSS] и другое | 5 | CULA | 3401 | 19.12.2023, 18:55 автор: CULA |
|
Услуги по созданию и доработке скриптов PHP, MySQL, JavaScript, jQuery Разработка сайтов и сервисов под-ключ |
0 | alexey | 1242 | 24.11.2023, 14:46 автор: alexey |
|
Веб-разработка (HTML5, CSS3, JavaScript, jQuery, Ajax, PHP) | 56 | qpPeW | 44908 | 19.7.2023, 10:03 автор: qpPeW |
|
Есть спецы по php/laravel? | 3 | Mixatraider | 1889 | 26.5.2023, 20:48 автор: Mixatraider |
|
Опытный PHP\Python разработчик в поиске интересных задач | 6 | daikzlex | 3402 | 25.5.2023, 13:55 автор: daikzlex |
Текстовая версия | Сейчас: 20.4.2024, 2:26 |