我可以在PHP if条件中定义变量吗?

7dl7o3gd  于 2023-01-12  发布在  PHP
关注(0)|答案(6)|浏览(122)

例如,我可以:

if ($my_array = wp_get_category($id)) {
    echo "asdf";
} else {
    echo "1234";
}

如果函数没有返回任何值,我想进入else语句。

xmq68pz9

xmq68pz91#

是的,那会起作用,而且这个模式经常被使用。
如果为$my_array指定了 * truthy * 值,则将满足条件。
CodePad.

<?php

function wp_get_category($id) {
   return 'I am truthy!';
}

if ($my_array = wp_get_category($id)) {
    echo $my_array;
} else {
    echo "1234";
}

反之亦然......
如果函数没有返回任何值,我想进入else语句。
不返回任何值的函数将返回NULL,即 * falsey *。
CodePad.

<?php

function wp_get_category($id) {
}

if ($my_array = wp_get_category($id)) {
    echo $my_array;
} else {
    echo "1234";
}
2nc8po8w

2nc8po8w2#

这实际上是一种常见的模式,并且可以正常工作。但是,您可能需要在将其用于更复杂的情况时三思而行,或者根本不使用它。想象一下,如果维护您代码的人走沿着看到

if ($x = one() || $y = two() && $z = three() or four()) {

}

在条件中使用变量之前声明变量可能会更好。

brccelvz

brccelvz3#

你可能会想要这样的东西

if (!is_null($my_array = wp_get_category($id)) {
    echo "asdf";
else
    echo "1234";

假设函数在失败时返回null,您可能需要对它进行一些调整。

im9ewurl

im9ewurl4#

我发现这对声明一个变量然后在同一语句的后续条件中立即使用它的规则感到疑惑。
感谢之前的codepad链接的答案,我自己做了一个来测试这个理论。它起作用了。
http://codepad.org/xTwzTwGR

wfauudbj

wfauudbj5#

以下是定义任何变量(具有安全性)的另一种方法:

$my_array = ($my_array = $wp_get_category($id)) ?: /* else statement here */;
yruzcnhs

yruzcnhs6#

我总是觉得这个原则令人困惑,因为它似乎从来没有为我工作!
if ($pid = $arr['Key']){
这可能会抛出一个错误Undefined index: Key。同样,我得到了相同的结果:
if (!empty($pid = $arr['Key']))
现在PHP7+的解决方案如下:
if ($pid = $arr['Key'] ?? false)
这将允许使用空值设置$pid = false;的数组,并且不触发IF语句。
我希望这能帮助一些人,因为数组扔给我,但双聚结是超级有帮助的,可以用在if的概念。

相关问题