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

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

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


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 30.07.2011, 02:11   #1
romantik2011
Форумчанин
 
Регистрация: 20.07.2011
Сообщений: 70
Репутация: 3
По умолчанию Эмуляция перегрузки в 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
Репутация: 74

icq: 332883664
По умолчанию

потому что если вырезать из твоего кода функцию __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
Репутация: 200
По умолчанию

Ну вобще-то в данном случае вы совсем неправильно обращаетесь с 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
Репутация: 78

icq: 433741134
skype: trance-smile
По умолчанию

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перегрузка операторов С++. Ошибка в реализации перегрузки 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


19:01.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.