替代';或';PHP中的关键字

替代';或';PHP中的关键字,php,keyword,Php,Keyword,现在我有以下代码: stream_wrapper_register("var", "VariableStream") or die("Failed to register protocol"); 我想在死之前做一些额外的事情,以防功能失效。因此,它提出了一个问题: or关键字究竟是如何工作的? 在许多问题或答案中,我看到人们创建了一个函数,如下所示: function doStuff() { header('HTTP/1.1 500 Internal Server Error'

现在我有以下代码:

stream_wrapper_register("var", "VariableStream")
    or die("Failed to register protocol");
我想在死之前做一些额外的事情,以防功能失效。因此,它提出了一个问题:

or关键字究竟是如何工作的?

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

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

stream_wrapper_register("var", "VariableStream")
    or doStuff();
。。。但这在面向对象的环境中是不现实的,因为我并不想在我的对象中为它创建一个方法,而且我还不能使用闭包

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


这是完全相同的,因为
stream\u wrapper\u register()
返回一个布尔值。

这两个语法是等效的,使用哪一个只是编码风格/偏好的问题。就我个人而言,我不喜欢
或死(…)
,因为在大多数情况下,这似乎更难阅读

a or b
逻辑上等同于

if (!a) {
    b
}
因此,您的解决方案很好。

带有“或”的语句很有效,因为PHP解释器非常智能: 因为“or”的连接为true,所以如果第一个连接为true,那么当第一个连接为true时,它将停止执行该语句

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

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

_true() or _true() or _true();
将只告诉您“_true”,因为链在第一个为true后结束,其他两个将永远不会执行

_false() or _true() or _true();
将给出“\u false\u true”,因为第一个函数返回false,解释器继续执行

同样适用于“和”

您也可以对“and”执行相同的操作,不同的是,当第一个“false”出现时,“and”的链就完成了:

_false() and _true() and _true();
将回显“_false”,因为结果已完成,无法再更改

_true() and _true() and _false();
将写上“\u真\u真\u假”

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

有一个“或”操作符可用。 标志是||

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

<?php
$count = NULL;

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


为什么不使用
try catch
block?@Ahmad好吧,stream\u wrapper\u register()不会引发异常,我不想自己为特定情况创建一个异常。是否存在可以使用“or die”来处理不返回false的故障情况?您可以简单地否定不返回false的条件。在本例中,它工作正常:
$a=true$死(‘不’)或使用“and die();”。阅读有点误读,但它是有效的:)这是一个更完整的解释,所以我将移动复选框:)@EGOrecords,
|
也能正常工作吗?| |等于“or”和&&等于“and”,所以是的。
_true() and _true() and _false();
<?php
$count = NULL;

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