急求三元运算符的意思 function meth(){$a=$_POST["user"];return isset($a) ? (is_array($a) ? $a : trim($a) : NULL;}麻烦解释下PHP里面这个三元运算符什么意思啊? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://www.php.net/manual/zh/language.operators.comparison.php拉下来会看到"三元运算符",那里有解释 function meth(){ $a=$_POST["user"]; $rtval = ''; if(isset($a)){ if(is_array($a)){ $rtval = $a; }else{ $rtval = trim(); } }else{ $rtval = NULL; } return $rtval;} if(isset($a)){ if ((is_array($a)){ return $a;}else{return trim($a);} }else{ return NULL;} 少了一个反括号吧?举个例子 求两者大的那个$a=0; $b =1;echo $a > $b(条件) ? $a(如果条件成立):$b(如果不成立);输出 1; 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所以只需保留红色的部分就可以了 //装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楼最后写的那种的,那个三元什么意思?那2个问号?return里面是什么意思? 三元运算符只有一个"?" 例子有两个是因为 一共用了两次三元运算。isset($a) ? (is_array($a) ? $a : trim($a)) : NULL;你先算出红色部分,这里会得到一个结果,然后再进行第二次运算至于return 他是将第二次运算(最后的结果)作为函数的返回值。关键是要分段运算啊! Invalid UTF-8 sequence in argument php rewrite_module 问题 关于PHP+sql server 处理时间日期的问题 关于变量赋值 一维数组如何存入二维数组 为什么本地测试用Localhost可以用127.0.0.1却不行 文什么取不到php的环境变量,请那位大侠帮忙。(up 有分) 2个有关PHP聊天室的问题,每问20分 讨论一下php中的java扩展问题,来者有分 一个如何减少sql查询的问题 mysql 中如何导入.txt文件 求xss绕开htmlspecialchars过滤原理
{
$a=$_POST["user"]; $rtval = '';
if(isset($a)){
if(is_array($a)){
$rtval = $a;
}else{
$rtval = trim();
}
}else{
$rtval = NULL;
}
return $rtval;
}
if(isset($a)){
if ((is_array($a)){
return $a;
}else{
return trim($a);
}
}else{
return NULL;
}
举个例子 求两者大的那个
$a=0; $b =1;
echo $a > $b(条件) ? $a(如果条件成立):$b(如果不成立);
输出 1;
是错误的!应写作
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
所以只需保留红色的部分就可以了
//装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
isset($a) ? (is_array($a) ? $a : trim($a)) : NULL;
你先算出红色部分,这里会得到一个结果,然后再进行第二次运算
至于return 他是将第二次运算(最后的结果)作为函数的返回值。
关键是要分段运算啊!