检查函数php中的未定义变量

时间:2014-07-21 14:55:13

标签: php

所以我一直试图设计一个只有echo会话变量才能设置的函数,这样它就不会创建关于未定义变量的'Notice'。我知道可以使用:

if(isset($_SESSION['i'])){ echo $_SESSION['i'];}

但是当有负载时它开始变得有点混乱(正如你可能已经猜到的那样,它是将数据带回一个表格......无论出于何种原因)。我的一些价值观也只需要回报,如果它等于某种东西,回应别的东西会让它变得更加混乱:

if(isset($_SESSION['i'])){if($_SESSION['i']=='value'){ echo 'Something';}}

因此,为了尝试懒惰,整理一下,我尝试了这些功能:

function ifsetecho($variable) {
    if(!empty($variable)) {
        echo $variable;
    }
}

function ifseteqecho($variable,$eq,$output) {
    if(isset($variable)) {
        if($variable==$eq) {
            echo $output;
        }
    }
}

哪个不能工作,因为要通过该函数,必须声明变量......

有没有人找到类似这项工作的方法?

3 个答案:

答案 0 :(得分:0)

您可以使用变量:

$cat = "beautiful";
$dog = "lovely";

function ifsetecho($variable) {
    global $$variable;
    if(!empty($$variable)){
        echo $$variable;
    }
}

ifsetecho("cat");
echo "<br/>";
ifsetecho("dog");
echo "<br/>";
ifsetecho("elephant");

更新:使用相当复杂的代码,我已成功满足您的要求:

session_start();
$cat = "beautiful";
$dog = "lovely";
$_SESSION['person']['fname'] = "Irene";

function ifsetecho($variable){
    $pattern = "/([_a-zA-Z][_a-zA-Z0-9]+)".str_repeat("(?:\\['([_a-zA-Z0-9]+)'\\])?", 6)."/";
    if(preg_match($pattern, $variable, $matches)){
        global ${$matches[1]};
        if(empty(${$matches[1]})){
            return false;
        }
        $plush = ${$matches[1]};
        for($i = 2; $i < sizeof($matches); $i++){
            if(empty($plush[$matches[$i]])){
                return false;
            }
            $plush = $plush[$matches[$i]];
        }
        echo $plush;
        return true;
    }
    return false;
}

ifsetecho("cat");
echo "<br/>";
ifsetecho("dog");
echo "<br/>";
ifsetecho("elephant");
echo "<br/>";
ifsetecho("_SESSION['person']['fname']");
echo "<br/>";
ifsetecho("_SESSION['person']['uname']");
echo "<br/>";

答案 1 :(得分:0)

也许你可以用foreach来实现这个目标?

foreach ($_SESSION as $variable)
 {function ifseteqecho($variable,$eq,$output) {
    if($variable==$eq) {
        echo $output;
    }
    else echo $variable;
  }
}

现在这将检​​查相同的$eq,但是有一个对应的$eq$variables的数组:

$equiv = array
 ('1'=>'foo',
  'blue'=>'bar',);

你可以全部检查:

foreach ($_SESSION as $variable)
 {function ifseteqecho($variable,$equiv) {
    if(isset($equiv[$variable])) {
      echo $equiv[$variable];
    }
    else {
      echo $variable;
    }
  }
}

答案 2 :(得分:0)

这样的东西?,你可以扩展它以满足你的确切需求......

function echoIfSet($varName, array $fromArray=null){
   if(isset($fromArray)){
      if(isset($fromArray[$varName])&&!empty($fromArray[$varName])){
          echo $fromArray[$varName];
      }
   }elseif(isset($$varName)&&!empty($$varName)){
      echo $$varName;
   }
}