使用OR运算符获取文字表达式值,而不是PHP中的true或false

时间:2019-02-25 06:44:38

标签: php

在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的表达式的字面值?

3 个答案:

答案 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。 对于空合并运算符,请使用

link