替代';或';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";
}
?>