Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.12.2008, 10:09   #11
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,674
По умолчанию

Да, но ведь в функцию передается не имя переменной, а её значение.
Что, если у нас есть такой код:
Код:
$a = $b = 12345;
echo some_other_function ($a) . "<br />\n";
echo some_other_function ($b) . "<br />\n";
echo some_other_function (12345) . "<br />\n";
Что мы получим?
Arigato вне форума Ответить с цитированием
Старый 13.12.2008, 10:48   #12
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,674
По умолчанию

Зачем нужна подобная функция, я так и не понял. Вот вариант решения (с примером):
PHP код:
function some_other_function_ex (& $var, & $root$elem false)
{
    
$keys array_keys ($root);
    for ( 
$i 0$i count ($keys); $i++ )
    {
        if ( 
$keys[$i] == "GLOBALS" ) continue;
        if ( 
is_array ($root[$keys[$i]]) ) 
        {
            
$result some_other_function_ex ($var$root[$keys[$i]], true);
            if ( 
$result !== false )
            {
                if ( 
$elem ) return "['" $keys[$i] . "']" $result;
                else return 
'$' $keys[$i] . $result;
            }
        }
        if ( 
$root[$keys[$i]] === $var )
        {
            
$temp $var;
            
$marker = ( $temp == "XXX" ) ? "YYY" "XXX";
            
$var $marker;
            if ( 
$root[$keys[$i]] == $marker )
            {
                
$var $temp;
                if ( 
$elem ) return "['" $keys[$i] . "']";
                else return 
'$' $keys[$i];
            }
            
$var $temp;
        }
    }
    return 
false;
}

function 
some_other_function (& $var)
{
    return 
some_other_function_ex ($var$GLOBALS);
}

$a $b 12345;
$arr = array ("a1" => "hello""b2" => array (=> "hello"=> "test"), "c3" => "hello");
echo 
some_other_function ($a) . "<br />\n";
echo 
some_other_function ($b) . "<br />\n";
echo 
some_other_function ($arr["a1"]) . "<br />\n";
echo 
some_other_function ($arr["c3"]) . "<br />\n";
echo 
some_other_function ($arr["b2"][1]) . "<br />\n"
Недостаток: работает только, если передаваемые аргументы являются глобальными переменными.
Arigato вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обнуление переменной [MI_nor] Общие вопросы C/C++ 3 05.11.2008 18:01
Изменение переменной yura-cat Помощь студентам 7 20.09.2008 17:42
Работа с файлами (создание, удаление, открытие, связываение с переменной, очищение памяти переменной) Arkuz Общие вопросы Delphi 12 25.09.2007 20:47
Как изменить свойство объекта, если его имя находится в переменной? Aiden Компоненты Delphi 1 13.09.2007 07:57