function meth()
{
$a=$_POST["user"];
return isset($a) ? (is_array($a) ? $a : trim($a) : NULL;
}
麻烦解释下PHP里面这个三元运算符什么意思啊?

解决方案 »

  1.   

    http://www.php.net/manual/zh/language.operators.comparison.php拉下来会看到"三元运算符",那里有解释
      

  2.   

    function meth()
    {
    $a=$_POST["user"]; $rtval = '';
    if(isset($a)){
    if(is_array($a)){
    $rtval = $a;
    }else{
    $rtval = trim();
    }
    }else{
    $rtval = NULL;
    }

    return $rtval;
    }
      

  3.   


    if(isset($a)){
     if ((is_array($a)){
        return $a;
    }else{
    return trim($a);

    }else{
     return NULL;
    }
      

  4.   

    少了一个反括号吧?
    举个例子 求两者大的那个
    $a=0; $b =1;
    echo $a > $b(条件) ? $a(如果条件成立):$b(如果不成立);
    输出 1;
      

  5.   

    isset($a) ? (is_array($a) ? $a : trim($a) : NULL;
    是错误的!应写作
    isset($a) ? (is_array($a) ? $a : trim($a)) : NULL;
    当条件成立时(这里是$a已定义)就返回红色的部分,否则返回 NULL
    其中红色的部分为
    如果 $a 是数组,则返回 $a,否则去掉 $a 两端的空白字符并返回但是在这个函数中,并不能达到预期的目的。任何情况下都不会返回 NULL
    因为有 $a=$_POST["user"];
    这时无论 $_POST["user"] 是否存在,$a 都会被赋值,也就是下面的 isset($a) 永远成立。 
    当 $a 值为 NULL(即$_POST["user"]不存在)时,会执行 trim($a),将返回一个空串,而不是 NULL
    所以只需保留红色的部分就可以了
      

  6.   


    //装B写法
    function meth()
    {
    $a=$_POST["user"];
    return isset($a) ? (is_array($a) ? $a : trim($a) : NULL;
    }//还原一下
    function meth()
    {
     $a = $_POST["user"];
     if( isset($a)){
       if( is_array($a)) {
              return $a;
       }else {
            return trim(a);
       }
    }else {
    return null;
    }
    }简易简单的东西,简单点写,没必要折腾成那样。
    第二个建议,函数里接收$_POST 参数,是很不人道的,函数应该做得更单纯些,就是对参数进行处理,保证参数全从入口得到。
    第三个建议,就算要这样写,如果 不存在$_post['user']; 函数也挂了。 
    建议原函数更改为function meth()
    {return  isset($_POST["user"]) ? (is_array($_POST["user"]) ? $_POST["user"] : trim($_POST["user"]) : NULL;
    }
    return 
      

  7.   

    我写的时候写错了,就是7楼最后写的那种的,那个三元什么意思?那2个问号?return里面是什么意思?
      

  8.   

    三元运算符只有一个"?" 例子有两个是因为 一共用了两次三元运算。
    isset($a) ? (is_array($a) ? $a : trim($a)) : NULL;
    你先算出红色部分,这里会得到一个结果,然后再进行第二次运算
    至于return  他是将第二次运算(最后的结果)作为函数的返回值。
    关键是要分段运算啊!