gpt4 book ai didi

php - PHP 中 TRUE 和 FALSE 常量定义不一致

转载 作者:行者123 更新时间:2023-12-02 06:47:17 24 4
gpt4 key购买 nike

有时我会因此而将头撞到墙上。

var_dump(ord(true), ord(false));

给出:

int(49)
int(0)

因此 TRUE 被转换为 ASCII 码 49 - 数字 1,而 FALSE 被转换为 ASCII 码 0(零字节)。 为什么在 TRUE/FALSE 转换为字符串时会出现这种不一致?为什么 FALSE 不能转换为 ASCII 代码 48 - 数字 0,其中整数上下文是预期的(因为 TRUE 是“1”)?

此类定义的最大问题是,如果您将 bool 值存储在稍后保存在数据库中的某些变量中 - 那么 TRUE 将存储为“1”,而 FALSE 将存储为“” - 一个空字符串。因此,在存储到数据库之前,您需要转换为整数 (int)($bool_variable)。鉴于 PHP 支持全自动类型转换,在某些情况下需要执行手动转换非常令人沮丧并且有点愚蠢(所有类型都应该可以互换,或者用户必须自己执行转换在所有类型之间)。

有什么想法吗?

最佳答案

要求 boolord 本质上是没有意义的。 ord 需要一个字符串,因此将任何输入转换为一个字符串。 true 转换为 '1'false 转换为 '''1'ord49,空字符串的ord0.

这并不意味着 truefalse定义的。 true 定义为 truefalse 定义为 false。这只是您绊倒的类型转换规则(是的,它们可以说是神秘的)。大多数数据库都支持原生 bool 类型,或者它们的 PHP 数据库 API 会将 PHP bool 值转换为数据库的等效值,只要您正确使用 API。

至于为什么存在这些转换规则:

A boolean TRUE value is converted to the string "1". Boolean FALSE is converted to "" (the empty string). This allows conversion back and forth between boolean and string values.

https://www.php.net/manual/en/language.types.string.php#language.types.string.casting

不,没有比这更有意义的了。

关于php - PHP 中 TRUE 和 FALSE 常量定义不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55490331/

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