网站建设 工商注册,wordpress手机验证码登录界面,做外贸的都有那些网站,正规的制作网页的公司是否可以使用速记三元来检查变量是否已设置#xff0c;而不是是否计算结果为零或非零#xff1f;
例如#xff0c;我试过#xff1a;
$var 0;
echo (string) $var ?: (string) false ?: 2;但由于前两个表达式的计算结果均为“0”或“false”#xff0c;因此显示为 2。…是否可以使用速记三元来检查变量是否已设置而不是是否计算结果为零或非零
例如我试过
$var 0;
echo (string) $var ?: (string) false ?: 2;但由于前两个表达式的计算结果均为“0”或“false”因此显示为 2。
我认为也许将它们转换为字符串会产生不同的结果但事实并非如此。我想零就是零。
我想在分配变量时使用这种样式例如
$get-var $get-var ?: $setindb ?: $default;如果设置了$get-var我想将$get-var分配给$get-var否则检查db是否有值否则使用默认值。
我想我会提到我知道我可以做类似的事情
$get-var (!empty($get-var)) ? $get-var : ( (!empty($setindb)) ? $setindb : $default )但你来判断哪个更简单:)
【问题讨论】 为什么不使用 isset($get-var) 代替 好吧在我上面的例子中不是空的 isset 会更合适但这仍然让我处于同样的情况。我一直在寻找一种更清洁、更简单的方法。
【解决方案1】
字符串“0”和“false”在 PHP 中被视为 FALSE-y (list of false values) 值。
isset() 为已设置的变量返回 TRUE 而不是 NULL。 empty() 将检查变量是否已设置并且该变量不是 FALSE 值。所以它会为“0”返回TRUE。
我认为你想要的是你的第三个代码 sn-p但使用isset()而不是empty()。
最简单的方法使用最少的括号是
$get-var isset($get-var) ? $get-var : (isset($setindb) ? $setindb : $default);由于速记三元返回第一个参数你不能使用它因为那将是一个布尔值。 isset($get-gt;var) ?: $default 将返回 TRUE、FALSE 或 $default但绝不会返回 $get-gt;var 的值。 编辑也许你想要一个像合并函数这样的东西据我所知PHP 本身并不提供它但创建起来很简单。请注意这可能有点难看因为它使用传递对函数的引用。我会对这方面的 cmets 感兴趣它有我想的那么糟糕吗。
function coalesce(array $values)
{foreach($values as $value){if(isset($value))return $value;}return null;
}
$this-var coalesce(array($this-var, $setindb, $default));我还没有测试过上述内容。将数组中的变量作为引用传递amp; 符号。我很确定它会被 coalesce(array(1,a_string,false)); 这样的东西窒息。
【讨论】 好的不知道是否有一些技巧比如强制转换三元会检查除真假以外的技巧 empty()和isset()的区别及应用场景
a.当判断一个变量是否定义时可用isset();
应用表单提交时用isset($_POST[submit])的值来判定是否提交表单。
b.当判断一个变量是否为空时(不需要知道其是否赋值)可用empty();
应用表单验证时需验证必填项值是否为空。
c.当判断一个变量已经存在且不为空可先用isset(),再用empty();
应用文件上传时需判断$_FILES已赋值且不为空。