這可能是一個愚蠢而簡單的問題,但無法從google找到任何相關研究,也無法從之前經歷過......爲了複製該場景,我簡化了原始結構並設置了環境像下面這樣:包括的行爲
文件結構:
ROOT
|---/config/config.php
|---/system/system.php
index.php
在config/system.php
return array (
"test" => "this is test"
);
在config/config.php
class config
{
public static function site()
{
return include "system.php";
}
}
在index.php
include "config/config.php";
$result = config::site();
var_dump($result);
我期待$result
將包含來自system.php
數組,但它實際上輸出:int(1)
我猜測它已經成功地包含的文件,這就是爲什麼它輸出1
,但那只是我的猜測...
如果我改變文件名f ROM
/config/system.php
到/config/sys.php
和/config/config.php
,從
return include "system.php";
這一說法改爲return include "sys.php";
它會輸出我想要的結果:
array(1) { ["test"]=> string(12) "this is test" }
雖然我找到了一個解決方法,但我不明白爲什麼文件名是重要的,因爲我不認爲這是在PHP保留字的情況下。此外,我嘗試將文件命名爲echo.php
或strpos.php
,並且它仍按預期工作。
爲什麼我不能將我的腳本命名爲system.php
?
如果它的事,我的工作站下,使用XAMPP:64位的Windows,PHP 5.6.8
你得到正確的輸出。從PHP手冊'包含失敗返回FALSE並提出警告。除非被包含文件覆蓋,否則成功包括返回1.' – bansi
@bansi請參閱:http://php.net/manual/de/function.return.php – Rizier123
直到現在不能用PHP 5.5.9重現問題-1 Ubuntu。 – Rizier123