Форум программистов
 
О проблемах, например, с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Ответ
 
Опции темы
Старый 30.07.2011, 02:11   #1
romantik2011
Пользователь
 
Регистрация: 20.07.2011
Сообщений: 70
По умолчанию Эмуляция перегрузки в PHP, метод __call()

Решил сделать симулировать перегрузку в PHP, написал вот такой код.
PHP код:
class A{
function 
t($m){
echo 
" ".$m;
}

function 
__call($x1,$x2){
function 
t($s1,$s2){
        
$s1 $x1;
        
$s2 $x2;
        echo 
$s1.' '.$s2;
    }
function 
t($s1,$s2,$s3){
        
$s1 $x1;
        
$s2 $x2;
        echo 
$s1.' '.$s2.' '.$s3;
    }    
    
}

}

$obj = new A;
$obj->t("Каприз");
$obj->t(5,7);
$obj->t("Вася",500,"Мачо"); 
Результат:
Цитата:
Каприз 5 Вася
Почему не выводится так?
Цитата:
Каприз
5 7
Вася 500 Мачо
romantik2011 вне форума Ответить с цитированием
Старый 30.07.2011, 03:29   #2
kirosin
Форумчанин
 
Аватар для kirosin
 
Регистрация: 15.01.2010
Сообщений: 209
По умолчанию

потому что если вырезать из твоего кода функцию __call, которая нигде не вызывается, то останется только это:
PHP код:
class A
{
   function 
t($m)
   {
       echo 
" ".$m;
   }


$obj = new A
$obj->t("Каприз"); 
$obj->t(5,7); 
$obj->t("Вася",500,"Мачо"); 
функция t ожидает только один параметр, а не несколько.
Все генитальное просто.
kirosin вне форума Ответить с цитированием
Старый 30.07.2011, 23:12   #3
Cronos20
Форумчанин
 
Регистрация: 08.07.2010
Сообщений: 679
По умолчанию

Ну вобще-то в данном случае вы совсем неправильно обращаетесь с call
1. То что вы там внутри написали функции .. это ни о чем ... их хотя бы вызвать надо ...
2. Call принимает совсем не те параметры, которые вы думаете
Код:
    public function __call($name, $arguments) {
        echo "Calling object method '$name' "
             . implode(', ', $arguments). "\n";
    }
Т.е. там название "несущуствующего" метода и массив переданных аргументов ... может этот пример из оф. документации чем-нибудь поможет, хотя я реализовывал бы перезагрузку по другому, потому что php это все не предусмотрено в явном виде
Код:
function t($arg1, $arg2 = false, $arg3 = false){}
Ну и проверяйте, пришли вам параметры или нет
Cronos20 вне форума Ответить с цитированием
Старый 31.07.2011, 12:36   #4
TranceSmile
Смайлик :)
Форумчанин
 
Аватар для TranceSmile
 
Регистрация: 12.12.2010
Сообщений: 444
По умолчанию

Вот статейка может поможет
TranceSmile вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перегрузка операторов С++. Ошибка в реализации перегрузки Angry_johnny Помощь студентам 0 25.05.2011 15:10
Проблема перегрузки операции присваивания с производным классом kenzoxai Общие вопросы C/C++ 1 24.05.2011 15:43
Задача Коммивояжера. Метод Монте-Карло и метод приращений. [Паскаль] U9110 Помощь студентам 4 06.04.2011 09:48
Turbo Pascal[програмыки : текстовая\метод симпсона\метод половинного деления qsccsq Помощь студентам 7 24.12.2010 06:23
Перегрузка операторов, Организация перегрузки операторов chagin_yav Помощь студентам 2 12.05.2008 09:15


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS