在Javascript中,我们可以方便地获取||
运算符中提供的各种选项之一。例如:
console.log('a' || '' || 0); // Yields 'a'
console.log(0 || 'b' || 'a'); // Yields 'b'
上面的结果可以很容易地分配给这样的变量:
let test = 'a' || '' || 0;
但是,在PHP中,当我尝试这样做时:
$test = 'a' || '' || 0;
给了我$test = 1
,其中1
的意思是true
。 PHP中是否有一种方法可以获取导致其产生true
的表达式的字面值?
答案 0 :(得分:2)
为此,您可以使用Elvis operator,例如
$test = 'a' ?: '' ?: 0;
var_dump($test);
> string(1) "a"
$test2 = 0 ?: 'b' ?: 'a';
var_dump($test2);
> string(1) "b"
也有空合并运算符(??),但仅当第一个为空时才采用第二个值,例如0 ?? 'a'
将为0,因为它不为null。
答案 1 :(得分:1)
根据PHP's logical operators page上一些用户提供的注释,您可以使用三元运算符:
npm install gojs@1.8.34
或者,如果您正在运行PHP 7+,并且只需要传递空变量(而不是虚假变量),则可以使用空合并运算符$test = $a ? $a : ($b ? $b : 'default')
:
??
答案 2 :(得分:0)
PHP的布尔运算符始终返回布尔值...相反 到其他返回最后评估值的语言 表达。
例如:
$a = 0 || 'avacado';
print "A: $a\n";
将打印:
A: 1
在PHP中-与使用Perl或JavaScript这样的语言打印“ A:avacado”相反。
这意味着您不能使用“ ||”操作员设置默认值:
$a = $fruit || 'apple';
相反,您必须使用'?:'ternary operator:
$a = ($fruit ? $fruit : 'apple');
如果您使用的是PHP 7+,那么您也可以使用null-coalescing运算符 ??:。
<?php
// Fetches the value of $_GET['user'] and returns 'nobody'
// if it does not exist.
$username = $_GET['user'] ?? 'nobody';
// This is equivalent to:
$username = isset($_GET['user']) ? $_GET['user'] : 'nobody';
// Coalescing can be chained: this will return the first
// defined value out of $_GET['user'], $_POST['user'], and
// 'nobody'.
$username = $_GET['user'] ?? $_POST['user'] ?? 'nobody';
?>
有关更多信息,您可以参考此link。 对于空合并运算符,请使用
。