gpt4 book ai didi

php - (bool)true var 在数组赋值时不会转换为数组,但 (bool)false 会。为什么?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:07:08 25 4
gpt4 key购买 nike

使用 PHP... 一个例子。这会产生警告 - 正如预期的那样 - 并且 $myVar 保持为 bool(true)。

$myVar = true;
$myVar[] = 'Hello'; // Warning: Cannot use a scalar value as an array

但是下一个示例“有效”,$myVar 被转换为一个包含单个元素“Hello”的数组。

$myVar = false;
$myVar[] = 'Hello'; // Converted into an array

结果:

array(1) {
[0]=>
string(5) "Hello"
}

然而,bool(true) 和 bool(false) 都是标量。那么为什么不同呢? PHP 中的什么规则控制这种行为?还是“就是这样”?!

我最初认为这可能与类型转换规则有关,但 bool(true) 和 bool(false) 在这方面的行为相同。

谢谢。

最佳答案

因此,尽管我不知道 为什么 PHP 这样做,但我查看了一些 Zend 代码并且至少可以告诉您在哪里可以找到 PHP 究竟是如何做到的。

所以,重要的代码在zend_fetch_dimension_address中.

那么,让我们涵盖上述情况:

如果它是 IS_ARRAY - 一切都很明显。

如果 IS_OBJECT 抛出错误,除非它有 ArrayAccess

如果 IS_STRING 抛出错误,除非字符串长度为零

如果 IS_NULL 创建一个新数组

如果它 IS_BOOL 抛出一个错误,除非它是 false

否则,抛出错误。

所以,这证实了你和我的测试:

错误如果对象、非空字符串、true 和其他标量,即 long 和 double。如果数组、空字符串、nullfalse 则不会出错。所以基本上它会自动转换大多数(但不是全部)“虚假”值。

关于php - (bool)true var 在数组赋值时不会转换为数组,但 (bool)false 会。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3232061/

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