今天我尝试包含返回对象的文件。我总是使用 require_once,但是现在我注意到它的奇怪行为。
文件 main.php
$lang = false;
$lang->name = "eng";
$lang->author = "Misiur";
$lang->text = "Text is test";
$lang->undefined = "Undefined";
return $lang;
文件 index.php
$lang = include('langs/eng/main.php');
var_dump($lang);
echo "<br />";
$lang = require('langs/eng/main.php');
var_dump($lang);
echo "<br />";
$lang = require_once('langs/eng/main.php');
var_dump($lang);
结果
object(stdClass)#9 (4) { ["name"]=> string(3) "eng" ["author"]=> string(6) "Misiur" ["text"]=> string(12) "Text is test" ["undefined"]=> string(9) "Undefined" }
object(stdClass)#10 (4) { ["name"]=> string(3) "eng" ["author"]=> string(6) "Misiur" ["text"]=> string(12) "Text is test" ["undefined"]=> string(9) "Undefined" }
bool(true)
为什么会这样?我认为 require 和 require_once 是一回事,只有 require_once 更安全,因为它不会重复包含。
谢谢。
编辑:
但是当我只使用require_once 时,我也会得到 bool(true)。所以 require_once 只返回包含的结果,而不是它的内容?
编辑2:
哈哈。我没有注意到,早些时候我在我的类中需要这个文件,它是在代码执行之前创建的 ($this->file = require_once("langs/$name/main.php");)
所以 require_once 可以正常工作。多谢你们!