Re: [GENERAL-BG] stranno
| From: | Andrey Hristov | Date: | Thu, 23 Dec 2004 09:20:02 +0000 |
| Subject: | Re: [GENERAL-BG] stranno | ||
| References: | 1 2 | Groups: | php.general.bg |
| Request: | Send a blank email to general-bg+get-205@lists.php.net to get a copy of this message | ||
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 нива на индиректност : хендъл
сочи към обект в магазина, обект в магазина сочи към памет.
Ще завърша, че горното решение ще работи, но просто понякога може да
има странични ефекти.
Поздрави и весели празници,
Андрей