Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 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
Сообщений: 445
По умолчанию

Вот статейка может поможет
Самый перспективный framework Yii (c)
TranceSmile вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перегрузка операторов С++. Ошибка в реализации перегрузки 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 05:23
Перегрузка операторов, Организация перегрузки операторов chagin_yav Помощь студентам 2 12.05.2008 09:15