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

Поиск:

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


Шустрый
*


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

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



Как определить, что две переменные ссылаются на одно и то же значение? То есть одна переменная является ссылкой на другую. Оператор сравнения "===", как я понимаю, здесь не подходит, ибо он сравнивает два значения на предмет их обычного соответствия.
PM WWW   Вверх
Pitlord
Дата 5.11.2009, 23:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Никак. В PHP нет такого типа "ссылка", ты не сможешь получить адрес памяти, где лежит значение, стандартных средств самого PHP для этого тоже нет.

А где может возникнуть такая необходимость? smile

Это сообщение отредактировал(а) Pitlord - 5.11.2009, 23:12
PM MAIL   Вверх
мухр
Дата 5.11.2009, 23:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Pitlord @  5.11.2009,  23:09 Найти цитируемый пост)
В PHP нет такого типа "ссылка"
 То есть как это нет? smile А как же присвоение по ссылке:
Код

$a =& $b;


Цитата
А где может возникнуть такая необходимость?

Ну, например, в прерывании бесконечного цикла.
PM WWW   Вверх
Pitlord
Дата 5.11.2009, 23:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(мухр @  5.11.2009,  23:36 Найти цитируемый пост)
 То есть как это нет? smile

$a после этой операции будет такого же типа, как и $b, т.е. $a и $b будут абсолютно идентичными переменными. То есть $a будет ссылкой на $b только на словах, по сути можно будет точно так же назвать  $b ссылкой на $a

Цитата(мухр @  5.11.2009,  23:36 Найти цитируемый пост)
Ну, например, в прерывании бесконечного цикла. 

Настал мой черёд удивляться smile 

Это сообщение отредактировал(а) Pitlord - 5.11.2009, 23:46
PM MAIL   Вверх
bars80080
Дата 5.11.2009, 23:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



Цитата(Pitlord @  5.11.2009,  22:45 Найти цитируемый пост)

$a после этой операции будет такого же типа, как и $b, т.е. $a и $b будут абсолютно идентичными переменными

что-то я не понял этого объяснения

имеется ввиду, что $a и $b будут вообще одно и тоже? то есть всего лишь два имени одного и того же элемента и разница между ними будет такая же, как между медведем и bear`ом
PM MAIL WWW   Вверх
Pitlord
Дата 6.11.2009, 00:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



bars80080, $a и $b где-то внутри будут указывать на одну и ту же область памяти, поэтому если будете менять $a, то будет меняться $b, и наоборот.
PM MAIL   Вверх
мухр
Дата 6.11.2009, 00:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Pitlord @  6.11.2009,  00:04 Найти цитируемый пост)
bars80080, $a и $b где-то внутри будут указывать на одну и ту же область памяти, поэтому если будете менять $a, то будет меняться $b, и наоборот.
 Совершенно верно. Так вот как узнать, что переменные $a и $b будут указывать на одну ту же область памяти, т. е. являться ссыками по сути?
PM WWW   Вверх
Pitlord
Дата 6.11.2009, 00:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(мухр @  6.11.2009,  00:15 Найти цитируемый пост)
Совершенно верно. Так вот как узнать, что переменные $a и $b будут указывать на одну ту же область памяти, т. е. являться ссыками по сути? 

Никак. 
PM MAIL   Вверх
sTa1kEr
Дата 6.11.2009, 00:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 56
Всего: 146



Цитата(Pitlord @  6.11.2009,  01:04 Найти цитируемый пост)
bars80080, $a и $b где-то внутри будут указывать на одну и ту же область памяти, поэтому если будете менять $a, то будет меняться $b, и наоборот. 

На самом деле просто во внутреннем представлении переменных $a и $b будет включен фалг "is_ref", на основании которого различается логика изменения значения этих переменных. Но с точки зрения PHP скрипта да, это выглядит как будто и $a и $b ссылаются на одно пространство в памяти.

Цитата(мухр @  6.11.2009,  01:15 Найти цитируемый пост)
 Совершенно верно. Так вот как узнать, что переменные $a и $b будут указывать на одну ту же область памяти, т. е. являться ссыками по сути? 

Штатными средствами никак. Можно узнать только является ли переменная передаваемой "по ссылке", т.е. включен ли флажек is_ref. Но узнать ссылаются ли обе переменные на одно и тоже значение можно только экспериментальным путем, т.е. изменив значение одной из них и сравнив затем это значение с другой. Других способов не существует.

Это сообщение отредактировал(а) sTa1kEr - 6.11.2009, 00:33
PM MAIL   Вверх
Pitlord
Дата 6.11.2009, 00:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(sTa1kEr @  6.11.2009,  00:30 Найти цитируемый пост)
Можно узнать только является ли переменная передаваемой "по ссылке", т.е. включен ли флажек is_ref

Как?
PM MAIL   Вверх
sTa1kEr
Дата 6.11.2009, 00:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 56
Всего: 146



Цитата(Pitlord @  6.11.2009,  01:39 Найти цитируемый пост)
Как? 

При помощи функции debug_zval_dump().
PM MAIL   Вверх
Pitlord
Дата 6.11.2009, 00:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(sTa1kEr @  6.11.2009,  00:42 Найти цитируемый пост)
При помощи функции debug_zval_dump(). 

Там только refcount можно получить или я что-то не так понял?
PM MAIL   Вверх
nerezus
Дата 6.11.2009, 03:34 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


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

Репутация: 12
Всего: 43



А самое главное, это то, что задача не имеет практического смысла, и возникла только из-за того, что кому-то надо подучить ООП.


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
brother79
Дата 6.11.2009, 07:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(мухр @  5.11.2009,  23:36 Найти цитируемый пост)
Ну, например, в прерывании бесконечного цикла. 



А можно озвучить подробности этой проблемы? У меня складывается впечатление, что должны быть более простые решения алгоритмические.


--------------------
PM MAIL WWW   Вверх
sTa1kEr
Дата 6.11.2009, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 56
Всего: 146



Цитата(Pitlord @  6.11.2009,  01:48 Найти цитируемый пост)
Там только refcount можно получить или я что-то не так понял? 

Там знак "&" в начале.
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.

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


 




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


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

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