![](/img/trans.png)
[英]Does php have an equivalent of javascript arrow functions (=>)?
[英]Does PHP have an equivalent to the ||= operator?
isset()
是执行此操作的常用方法:
if (!isset($blah)) {
$blah = 'foo';
}
注意:您可以将null
分配给变量,并且该变量将被分配。 这将与isset()
和is_null()
产生不同的结果,因此您需要清楚“未分配”的含义。 参见Null与isset() 。 在这种情况下,您也需要小心进行自动类型转换,这意味着根据所需结果使用!=/==
或===/!==
。
您也可以为此使用布尔简写(这就是Perl ||=
运算符)。 从PHP 5.2.x开始,没有像您所说的运算符。 在Perl中:
$a ||= $b;
等效于:
$a = $a || $b;
您可以在PHP中执行第二种形式,但是PHP具有一些有关类型变戏法的时髦规则。 请参见转换为布尔值 :
转换为boolean时 ,以下值为FALSE:
- 布尔值
FALSE
本身- 整数 0(零)
- 浮点数 0.0(零)
- 空字符串和字符串 “ 0”
- 零元素数组
- 成员变量为零的对象 (仅PHP 4)
- 特殊类型
NULL
(包括未设置的变量)- 从空标签创建的SimpleXML对象
其他所有值均视为TRUE(包括任何资源)。
所以之后:
$a = 0;
$a = $a || 5;
$ a等于5。同样:
$a = 0;
$b = '';
$c = $a == $b; // true
$d = $a === $b; // false
您必须提防这些事情。
isset($foo) || $foo = 'bar';
从php 5.3开始,您可以使用:
$result = $result ?: check1();
我想到了这个功能,它具有关闭无用的未定义变量通知的副作用。 对我来说,它足够接近Javascript的行为:
function default_value(&$var, $default) {
return isset($var) ? $var : $default;
}
$want_something = default_value($_POST['mightbeunset'], false);
如何使用几个嵌套的三元运算符?
对我来说,这是处理您的问题的最简单方法。 并且由于您可以使用嵌套三元运算符,因此您应该能够在需要时添加更多检查。
$var = isset($var) ? $var : ($i=check1()) ? $i : ($i=check2()) ? $i : "default" ;
几乎是相同数量的代码,它应该可以工作..除非我误解了您。 如果是这样,我很抱歉。
与您作为示例发布的原始代码相比,其长度几乎相同:
$result = null; $result ||= check1(); $result ||= check2(); $result ||= "default";
- vs -
$var = isset($var) ? $var : ($i=check1()) ? $i : ($i=check2()) ? $i : "default" ;
嵌套的三元运算符可能会有些混乱,因此在此处带有注释:
// Is $var set?
$var = isset($var) ?
// TRUE: It is, use $var
$var :
// FALSE: $var is not set, run check1
( $i=check1() ) ?
// TRUE: the function check1 returned valid data
$i :
// FALSE: the function check1 returned null or false, run check2
($i=check2()) ?
// TRUE: the function check2 returned valid data
$i :
// FALSE: the function check1 returned null or false, set default value
"default" ;
我还没有尝试过,但是想和PECL Operator玩很久了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.