Re: [GENERAL-BG] stranno
[email protected] (Andrey Hristov) Thu, 23 Dec 2004 10:20:02 +0100
| Newsgroups | php.general.bg |
|---|---|
| Message-ID | <[email protected]> |
Nikolay Bachiyski wrote:
> Bogomil Shopov wrote:
>
> > Здравейте
> > Аз имам един малко странен въпрос. Как може да се вземе името на
> променливата, чиято стойност е определена.
> >
> > Ето код:
> > <?php
> > $test="bla";
> > ?>
> > Как може да се вземе променливата? Тоест има ли начин нещо да ми
> върне $test?
> >
> >
> > Весели празници
> > Богомил
> >
> Здравейте,
>
> Ако променливата е глобална, то тя попада в голбалния namespace, който
> за всеобщо улеснение е един хеш с ключове имената на променливите и със
> стойности.... техните стойности.
>
> Разбира се, ако не е глобална мисля, че ще бъде трудно - вероятно точно
> под името на променливата php си пази нещо като reference към някаква
> вътрешна структура. Може би Андрей може да каже как точно стават нещата...
>
> Ето все пак бърз пример (за 'глобалния' случай):
> [code]
> <?php
> $babavar = 'баба';
> $dyadovar = 'чичо';
> foreach ($GLOBALS as $var => $value) {
> if ($value == 'баба')
> print "$var\n";
> }
> ?>
> [/code]
>
> Поздрави,
> Николай Бачийски
>
Здравейте,
доколкото съм наясно във функции няма аналог на $GLOBALS. Проблема,
който аз виждам, е че по-горното решение не е детерминистично, понеже
няколко променливи могат да имат същата стойност поради различни
причини :
1) Те са копия
2) Сочат към една и съща памет : $a=md5('foobar'); $b=&$a;
2) е в сила още повече за обекти, независимо дали са в ПХП4 или ПХП5.
Който използва обекти в 4 знае, че амперсанда се използва често. В 5
просто променливата е хендъл (указател) към магазина с обекти и така
не се налага явно да се използва амперсанд, а с просто присвояване става.
Мисля, че Джава моделът е същият - с 2 нива на индиректност : хендъл
сочи към обект в магазина, обект в магазина сочи към памет.
Ще завърша, че горното решение ще работи, но просто понякога може да
има странични ефекти.
Поздрави и весели празници,
Андрей