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 нива на индиректност : хендъл
сочи към обект в магазина, обект в магазина сочи към памет.

  Ще завърша, че горното решение ще работи, но просто понякога може да
има странични ефекти.

Поздрави и весели празници,
Андрей