比方說,我有以下幾點:PHP類成員的數組是不恰當的緩存
<?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'
雖然我看到的行爲是,第二個電話仍然不會找到'東西'。我懷疑這與PHP如何緩存有關,但我不知道具體是什麼。它具有很高的重現性:我可以在代碼中以任何方式更改數組,並且只要我不在函數調用中修改該成員變量,它將保持原始值... 即使在Apache中也可以重新啓動。
有沒有人看過這個可以解釋行爲的人?
澄清一點:有一些形式的緩存行爲在這裏進行,這與php的一些實現細節或php的緩存有關。這不是一個代碼錯誤;這僅僅是這個代碼揭示的行爲。此外,我們使用hidef,這可能是一個顯着的細節和PHP 5.2.10
你對第二個例子的評論說「找不到東西」......你的意思是「找到東西」? –
你的函數永遠不會返回任何東西...... – lonesomeday
valid()的確切語義並不重要。我可能會返回一些東西或者只是輸出$ validThings的值。問題不在那裏。 –