私が次のものを持っているとしましょう:
<?php
class MyClass {
public $validThings = array("Stuff");
//checks to see if $input is in the array $validThings
public function valid($input) {
return is_int(array_search($input, $this->validThings);
}
}
次のことが期待されます。
$myClassInstance->valid("Stuff");//finds 'Stuff'
$myClassInstance->valid("Things");//doesn't find 'Things'
ここで、$validThings の初期化のコードを次のように変更したとします。
public $validThings = array("Stuff", "Things");
期待されること:
$myClassInstance->valid("Stuff");//finds 'Stuff'
$myClassInstance->valid("Things");//finds 'Things'
ただし、私が見ている動作は、2 番目の呼び出しでも「Things」が見つからないということです。これは、PHP のキャッシュ方法と関係があると思われますが、具体的にはわかりません。再現性が高い: コード内で配列を変更することができ、関数呼び出し内でそのメンバー変数を変更しない限り、元の値を保持します... Apache のハード再起動後でも.
動作を説明できる人はこれを見たことがありますか?
ポイントを明確にするために: ここでは、php の実装の詳細または php の周りのキャッシュに関係する何らかの形式のキャッシュ動作が行われています。これはコードのバグではありません。これは、このコードによって明らかにされた単なる動作です。また、顕著な詳細とphp 5.2.10である可能性があるhidefを使用しています