проблема с областью php для проверки функций isset - PullRequest
0 голосов
/ 16 сентября 2011

Мне нужна функция, которая будет принимать строку в качестве аргумента, а затем проверить, установлена ​​ли переменная с именем, совпадающим с той же строкой.

Это работает ...

$foo = 'foosuccess';
$property = 'foo';
if(isset($$property)){
echo $$property;
}

Это не так, потому что в рамках test () свойство $$2 является неправильной областью действия.

$huh = 'huhsuccess';
$huh = test("huh");
function test($property2){
    if(isset($$property2)){
        echo $$property2;
}
}

Как я могу исправить функцию, чтобы $$ property2 ссылался на ту же область, что и контекст вызывающей стороны?Это возможно?

Заранее спасибо ....

Ответы [ 4 ]

0 голосов
/ 16 сентября 2011

хорошо, думаю, я понял это для своих целей (если кому-то интересно ...)

//uncomment to get success
//$huh = 'huhsuccess';
$huh = test($huh);

echo $huh;

function test(&$property2) {
   if(isset($property2)) {
       return $property2;
   } else {
       return 'not set!';
   }
}
die;
0 голосов
/ 16 сентября 2011

попробуйте это:

$huh = 'huhsuccess';
test("huh");

function test($property2) {
    global $$property2;

    if(isset($$property2)) {
        echo $$property2;
    }
}
0 голосов
/ 16 сентября 2011
<?php
function test($s) 
{ 
  return isset($GLOBALS[$s]);
}
0 голосов
/ 16 сентября 2011

Это можно сделать с помощью eval():

   $foo = 'foosuccess';
    $property = 'foo';
    if(eval('isset($'.$property.')'){
    echo $$property;
    }
...