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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Узнать имя объекта, в котором вызван метод 
:(
    Опции темы
Mal Hack
Дата 20.2.2005, 22:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

Репутация: 8
Всего: 261



Имеем. Класс. От него создаются два объекта ( $text1 & $text2 ), в методе repl надо узнать какой объект используется.
т.е. вывод должен дать:
Цитата
test1
test2


Код
<?php

class text
 {
   function repl()
    {
      return "Имя объекта";
    }
 }

$text1 = & new text;
$text2 = & new text;

print $text1 -> repl();
print "<br>";
print $text2 -> repl();

?>


ЗЫ: Решение задачи по большей части теоретическое, т.е. не для реальной практической задачи. По крайней мере в таком исполнении, как я писал выше.
PM ICQ   Вверх
Sardar
Дата 20.2.2005, 22:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

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



Если глянуть логически то это бессмыслица, ибо имя ссылки на обьект это вещь отдельная от обьекта и несколько ссылок может указывать на один обьект.

Но всё же если переменная в глобальном окружении, то можно поискать в $GLOBALS.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Mal Hack
Дата 20.2.2005, 22:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

Репутация: 8
Всего: 261



Цитата(Sardar @ 20.2.2005, 22:31)
Но всё же если переменная в глобальном окружении, то можно поискать в $GLOBALS.

И что ты там собираешься искать? smile

Цитата(Sardar @ 20.2.2005, 22:31)
Если глянуть логически то это бессмыслица, ибо имя ссылки на обьект это вещь отдельная от обьекта и несколько ссылок может указывать на один обьект.

В Delphi можно через Sender'a отловить... Вот тут надо что-то подобное...
Да, конечно можно перед вызовом метода писать в какое-ть свойство имя объекта... Но это просто слишком smile
PM ICQ   Вверх
Sardar
Дата 20.2.2005, 22:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

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



Цитата(Mal @ 20.2.2005, 21:48)
И что ты там собираешься искать?

this там можно поискать smile Но это не пройдёт для локальных переменных функции.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Irokez
Дата 20.2.2005, 23:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


индеец
***


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

Репутация: 4
Всего: 53



мое мнение - средствами пхп - никак ...
PM   Вверх
Irokez
Дата 20.2.2005, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


индеец
***


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

Репутация: 4
Всего: 53



смог додуматься только до этого:
Код

<?php
class text
{
   var $def_vars;
   function text($vars)
   {
       $this->def_vars=$vars;
   }

   function repl($vars)
   {
       foreach($vars as $key => $var)
           if($this===$var)
           {
               $test=true;
               foreach($this->def_vars as $def_var)
                   if($this===$def_var)
                   {
                       $test=false;
                       break;
                   }
               if($test) return $key;
           }
   }
}

$text1 = new text(get_defined_vars());
$text2 = new text(get_defined_vars());
$vars=get_defined_vars();
print $text1 -> repl($vars);
print "<br>";
print $text2 -> repl($vars);

?>

PM   Вверх
Sardar
Дата 21.2.2005, 00:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

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



Прикольно smile
Если создаеём класс не имеющий приватных полей, т.е. две инстанции не будут различатся, то им обеим присваивается один экземпляр класса:
Код
class text {
   function repl()
    {
      foreach($GLOBALS as $k=>$v) {
         if($GLOBALS[$k]===$this) echo " Found {$k}";
      }
      return "Èìÿ îáúåêòà";
    }
 }
$text1 =& new text;
$text2 =& new text;

print $text1 -> repl();
print "<br>";
print $text2 -> repl();


Однако если ввести поле классу, так что бы экземпляры различались по состоянию, то переменные получат разные экземпляры класса! Видать PHP экономит память где это можно smile
Код
class text{
  var $bla;
  function text($bl) {
    $this->bla=$bl;
  }
   function repl()  {
      foreach($GLOBALS as $k=>$v) {
        if($GLOBALS[$k]===$this) echo " Found {$k}";
      }
      return "Èìÿ îáúåêòà";
    }
 }
class tree {

}
$text1 =& new text("Raz");;
$text2 =& new text("Dva");
$a =& new tree();

print $text1 -> repl();
print "<br>";
print $text2 -> repl();




--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Mal Hack
Дата 21.2.2005, 00:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

Репутация: 8
Всего: 261



Цитата(Sardar @ 21.2.2005, 00:31)
две инстанции не будут различатся, то им обеим присваивается один экземпляр класса:

Тут получится, что два объекта наследованы от одного класса и имеют методы и свойства с одинаковыми значениями.
Этот вариант пошел как один из первых, но он всегда может вернуть не то (см. выше почему)...

Irokez
С твоим вариантом завтра разберусью
PM ICQ   Вверх
<Spawn>
Дата 21.2.2005, 06:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

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



Если PHP5, то посмотри ReflectionAPI. Там по идее должно быть то, что тебе нужно.


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Mal Hack
Дата 21.2.2005, 08:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

Репутация: 8
Всего: 261



<Spawn>
Нет, пока для 4 нужно.
PM ICQ   Вверх
Mal Hack
Дата 21.2.2005, 20:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

Репутация: 8
Всего: 261



Итак, вобщем что я сделал.
Так сказать окончательный вариант...

Код
<?php

class text
 {
  var $dd;

  function text()
   {  $this -> dd = mt_rand( 0 , 30000 );  }

  function repl1()
   {
    foreach($GLOBALS as $k=>$v)
     {
      if( $GLOBALS[$k] === $this )
       {  return $k;  }
     }
   }
 }

$text1 = & new text;
$text2 = & new text;

print $text1 -> repl1();
print "<br>";
print $text2 -> repl1();

?>


Irokez, спасиб, натолкнул на мыслю.. Суть уловил чегодня утром smile +.

Sardar, пасиб, в принципе весь код написал, и за интересную фичу в сходстве объектов.. +
PM ICQ   Вверх
Irokez
Дата 21.2.2005, 20:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


индеец
***


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

Репутация: 4
Всего: 53



да не за что, всегда пожалуста smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

Внимание: данный раздел предназначен для решения сложных, нестандартных задач.

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


 




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


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

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