我在 nginx 后面运行 php,带有 php-fpm 和 cron 任务到 php 二进制文件(/usr/bin/php)。
我发现了一个不一致的地方——当我通过 php 二进制文件和 fpm 运行相同的脚本时,它会输出不同的结果。
注意这仅适用于PHP7。在另一台服务器上,我用 5.6 对其进行了测试,结果是相同的。
这是我发现的。以下脚本:
<?php
class Test {
public function test(){
$arr = (object) [
'children' => []
];
$arr->children[] = 1;
return $arr;
}
}
$o = new Test();
$o->test();
print_r( $o->test() );
保存到test.php
. 当我通过浏览器(php-fpm)运行它时,会产生:
stdClass Object
(
[children] => Array
(
[0] => 1
)
)
但是当我从 CLI 执行它时,结果是不同的:
[root@server1 web]# php -f test.php
stdClass Object
(
[children] => Array
(
[0] => 1
[1] => 1
)
)
如果没有(对象)强制转换,它就不会发生。另外,如果我用它实例化$arr
它就new stdClass()
不会发生。
似乎$arr = (object)
php7 的引擎将其保存在内存中。
可能是配置问题。有人遇到过或可以解释一下吗?
谢谢。