nginx の背後で php-fpm と cron タスクを使用して php バイナリ (/usr/bin/php) に対して 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のエンジンによってメモリに保存されているようです。
多分それは構成の問題です。誰かが前にそれに遭遇したか、説明できますか?
ありがとう。