Я запускаю php за nginx с php-fpm и cron-задачами в php файл (/usr/bin/php).
Я нашел несогласованность - тот же самый script выводит разные результаты, когда я запускаю его через двоичный файл php и через fpm.
ПРИМЕЧАНИЕ. Это относится только к PHP7. На другом сервере я тестировал его с 5.6, и результат идентичен.
Вот что я нашел. Следующий script:
<?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, результат отличается:
[[email protected] web]# php -f test.php
stdClass Object
(
[children] => Array
(
[0] => 1
[1] => 1
)
)
Это не происходит без (объекта) кастинга. Также, если я создам $arr
с помощью new stdClass()
, этого не произойдет.
Кажется, что $arr = (object)
сохраняется в памяти с помощью php7 engine.
Возможно, это проблема конфигурации. Кто-нибудь сталкивался с ним раньше или может объяснить?
Спасибо.