替代PHP中的'或'关键字

时间:2012-02-02 14:41:30

标签: php keyword

现在我有以下代码:

stream_wrapper_register("var", "VariableStream")
    or die("Failed to register protocol");

我想在死前做额外的事情以防函数失败。所以它提出了这个问题:

'或'关键字如何正常工作?

在许多SO问题或答案中,我看到人们创建了一个函数,如下所示:

function doStuff() {
    header('HTTP/1.1 500 Internal Server Error');
    die("Failed to register protocol");
}

stream_wrapper_register("var", "VariableStream")
    or doStuff();

...但是在面向对象的上下文中这是不切实际的,因为我真的不想在我的对象中为它创建一个方法,我还不能使用闭包。

所以现在,我已经使用了这段代码,但我不确定它会有完全相同的行为

if (!stream_wrapper_register("var", "VariableStream") {
    header('HTTP/1.1 500 Internal Server Error');
    die("Failed to register protocol");
}

5 个答案:

答案 0 :(得分:9)

带有“或”的语句有效,因为PHP-Interpreter很聪明: 因为“或”的连接是真的,如果它们中的第一个为真,则当第一个为真时它停止执行该语句。

想象一下以下(PHP)代码:

function _true()  { echo "_true";  return true;  }
function _false() { echo "_false"; return false; }

现在你可以链接函数调用并在输出中看到会发生什么:

_true() or _true() or _true();

只会告诉你“_true”,因为链在第一个为真之后结束,其他两个永远不会被执行。

_false() or _true() or _true();

将给出“_false_true”,因为第一个函数返回false并且解释器继续。

同样适用于“和”

你也可以用“和”来做同样的事情,区别在于第一个“假”出现时“和”的链完成了:

_false() and _true() and _true();

将回显“_false”,因为结果已经完成,不能再更改了。

_true() and _true() and _false();

将写入“_true_true_false”。

因为大多数功能通过在成功时返回“1”来表示成功,并且在出错时可以执行function() or die()之类的操作。 但是有些函数(很少在php中)在成功时返回“0”,而!= 0表示特定错误。然后,您可能必须使用function() and die()

答案 1 :(得分:5)

a or b

在逻辑上等同于

if (!a) {
    b
}

所以你的解决方案很好。

答案 2 :(得分:2)

完全相同,因为stream_wrapper_register()返回一个布尔值。

答案 3 :(得分:2)

这两种语法是等价的,只是编码风格/偏好的问题,关于你使用哪一种。就个人而言,我不喜欢<statement> or die(...),因为在大多数情况下它似乎更难阅读。

答案 4 :(得分:0)

这是一个“OR”运算符。 标志是||

因此,作为一个例子考虑:

<?php
$count = NULL;

if ($count == 0 || $count == NULL) {
        echo "\nNo Value!\n";
        var_dump($count);
    } else {
        echo "\nSome Value";
    }
?>