我用php-fpm和cron任务运行php在nginx后面到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的引擎保存在内存中。
可能是配置问题。任何人之前遇到过或者可以解释一下吗?
感谢。