PHP是否具有与| |=运算符等价的运算符?
我想分配一个变量,但它还没有被分配。PHP执行以下操作的方式是什么PHP是否具有与| |=运算符等价的运算符?,php,Php,我想分配一个变量,但它还没有被分配。PHP执行以下操作的方式是什么 $result = null; $result ||= check1(); $result ||= check2(); $result ||= "default"; 我检查了和函数,但似乎没有一种简单的方法来执行上述操作。是执行此操作的常用方法: if (!isset($blah)) { $blah = 'foo'; } 注意:您可以将null赋值给变量,变量将被赋值。这将对isset()产生不同的结果,因此您需要明确“
$result = null;
$result ||= check1();
$result ||= check2();
$result ||= "default";
我检查了和函数,但似乎没有一种简单的方法来执行上述操作。是执行此操作的常用方法:
if (!isset($blah)) {
$blah = 'foo';
}
注意:您可以将null
赋值给变量,变量将被赋值。这将对isset()
产生不同的结果,因此您需要明确“未分配”的含义。看见在这种情况下,您还需要小心进行自动类型转换,这意味着使用=/==代码>或====/==代码>取决于所需的结果
您也可以使用布尔速记(这就是Perl| |=
运算符的含义)。在PHP5.2.x中,没有像您所说的那样的操作符。在Perl中:
$a ||= $b;
相当于:
$a = $a || $b;
您可以用PHP编写第二个表单,但是PHP有一些关于表单的时髦规则。见:
转换为时
以下值被认为是错误的:
FALSE
本身
- 0(零)
- 0.0(零)
- 空的和“0”
- 具有零元素的数据集
- 具有零成员变量(仅限PHP 4)的
- 特殊类型(包括未设置的变量)
- 从空标记创建的对象
其他所有值均视为真(包括任何资源)
因此,在:
$a = 0;
$a = $a || 5;
一美元等于五美元。同样地:
$a = 0;
$b = '';
$c = $a == $b; // true
$d = $a === $b; // 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" ;
我还没有尝试过,但已经想玩很久了。从PHP5.3可以使用:
$result = $result ?: check1();
我提出了这个函数,它有关闭无用的未定义变量通知的附带好处。对我来说,这已经足够接近Javascript的行为了:
function default_value(&$var, $default) {
return isset($var) ? $var : $default;
}
$want_something = default_value($_POST['mightbeunset'], false);
$a=0$a=$a | | 5;回声$a;//真奇怪。。。echo$a==5?“true':'false';//true-but-echo$a-1;//0很抱歉发表评论。。。echo$a==6?“true':'false';//true,因此比较的整数似乎正在转换为布尔值,而不是布尔值转换为数值。我知道自动类型转换有点不可靠,但这绝对不是我期望的行为。无论如何,我认为很明显$a=$a | | 5并不像广告宣传的那样有效。不过,它在Javascript中确实是这样工作的。这很酷。这似乎很明显,但我从来没有想过尝试它。嵌套的三元运算符应该会导致一个UnreadableOverflowException
function default_value(&$var, $default) {
return isset($var) ? $var : $default;
}
$want_something = default_value($_POST['mightbeunset'], false);