gpt4 book ai didi

php - 使用 'or die()' 停止 PHP 中的错误

转载 作者:IT王子 更新时间:2023-10-29 00:06:27 26 4
gpt4 key购买 nike

我经常在 PHP 中看到:

$result = mysql_query($query) or die();

来自 python,我知道为什么这应该有效,因为如果 or 在 bool 上下文中为真,则返回第一个值,否则返回第二个值(参见 this )。

但是当我在另一个上下文中尝试在 PHP 中使用上述技术时,例如:

$name = "John Doe";
echo $name or "Anonymous";

or 不返回第一个值(“John Doe”),它返回 1。

为什么这在 mysql_query() 结果情况下有效,但在其他情况下却无效?在 mysql_query() 情况下使用是否不好(忽略我没有向用户返回有用错误的事实)?

最佳答案

在 PHP 中,变量赋值(等号)和函数都优先于 运算符。这意味着函数首先被执行,然后函数的返回值用于 比较。反过来,当您将两个值/变量与 运算符一起使用时,它会首先比较这两个值,然后返回一个 bool 值。

因此,本例中的求值顺序为:

$result = mysql_query($query) or die();
  1. mysql_query($query)
    返回 DQL 查询的结果集,例如 SELECT,或者返回 DDL、DML 或 DCL 查询的 bool 值,例如 CREATEDROPINSERTUPDATEDELETEALTER

  2. $result = mysql_query($query)
    此查询执行的结果分配给变量 $result

  3. $result/* = ... */or die();
    如果它是结果集或 true,则它被认为是 true(也称为“truthy”),因此满足 or 条件并且语句到此结束。否则脚本将改为 die()


echo 是一种语言构造,因此实际上并不返回值,因此在进行 or 比较之前,它不像函数那样运行。

由于 $name 或 "Anonymous" 始终为真,因为字符串 "Anonymous" 非空,因此为真,echo隐式地将 true 转换为 1,因此输出。

本例中的求值顺序是:

$name = "John Doe";
echo $name or "Anonymous";
  1. $name = "李四";
    非常简单 — 将字符串 John Doe 分配给 $name

  2. $name 或“Anonymous”
    PHP 发现 $name 包含字符串 John Doe,因此最终被评估的内容如下:

  3. “John Doe”或“Anonymous”
    因为这里至少有一个字符串是非空的,所以它被认为是真实的并且满足条件。然后此评估返回 true

  4. echo true/* $name or... */;
    true 转换为 1 并打印数字 1。

关于php - 使用 'or die()' 停止 PHP 中的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3298997/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com