Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Кто кого использует? Определение вызова метода у класса 
:(
    Опции темы
Mushu
Дата 15.5.2009, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 20.7.2004

Репутация: -2
Всего: -5



Всем привет, кто сможет помогите плиз! 

Задача состоит в том , какими методами можно узнать кто вызывает метод обьекта из вне. (чето очень загнул) Для наглядности привожу пример

Код


class Sprint
{
    function __print()
    {
    
        /**
         * 
         * Сдесь как можно узнать какой клас(объект) вызвал метод данного класса(объекта) ?
         * 
         */
        
        if(??? == "first")
        {
            echo "hi";    
        }
        if(??? == "last")
        {
            echo "end";    
        }
        
        
    }
}


class first
{
    
    public $obj;
    
    
    function __construct($obg_in)
    {
        $this->obj = $obg_in;
        
    }
    
    
    function first_print()
    {
        $this->obj->__print();
    }
    
}


class last
{
    
    public $obj;
    
    
    function __construct($obg_in)
    {
        $this->obj= $obg_in;
        
    }
    
    
    function last_print()
    {
        $this->obj->__print();
    }
    
}


//_________________________________________________


$obj_print = new Sprint();

$obj_first = new first($obj_print);
$obj_first->first_print();


$obj_last = new last($obj_print);
$obj_last->last_print();

 
PM MAIL   Вверх
Avaj
Дата 15.5.2009, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 212
Регистрация: 14.7.2008
Где: Владивосток.

Репутация: нет
Всего: 3



Например можно каждому классу и объекту дать какой-нибудь идентификатор.

т.е. классу например можно в качестве идентификатора приписать статический член, ну а объектам например просто строчный идентификатор при создании (конструктор с параметром).

Наверно есть более цивилизованный способ в этом вашем PHP, как например в С++ - typeid. 

Это сообщение отредактировал(а) Avaj - 15.5.2009, 16:12
PM MAIL   Вверх
skyboy
Дата 15.5.2009, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



посмотри debug_backtrace.
она возвращает в том числе и имя класса, из которого произошел вызов текущей строки.

Добавлено через 1 минуту и 2 секунды
но мне кажется, что подобный подход выглядит подозрительно: а не пытается ли автор кода надеть штаны через голову?
конечно, если речь не идет об отладке.
PM MAIL   Вверх
Mushu
Дата 15.5.2009, 16:22 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 20.7.2004

Репутация: -2
Всего: -5



не пытается, суть в том, что если класс_1 вызывает метод класса_принт то происходит два действия, а если  класс_2 вызывает метод класса_принт то должно происходить одно действие ;)
PM MAIL   Вверх
skyboy
Дата 16.5.2009, 09:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



а если появится третий объект, то для него метод print будет выполнять четыре действия?
зачем возлагать на получателя команды дополнительную логику? либо вызывай эти одно/два/три действия в тех, кто вызывал метод print, либо реализуй кроме метода print ещё другие методы(навроде, print_with_borders), либо передавай в метод print дополнительные параметры.
Твой вариант оооочень сильно похож на здоровенную заплатку, которая может ещё принести головной боли.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0450 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.