[英]Include, require & require_once
今天我试图包含返回对象的文件。 我总是使用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只返回include的结果,而不是它的内容?
EDIT2:
大声笑。 我没注意到,之前我在我的类中需要这个文件,这个文件是在代码执行之前创建的($ this-> file = require_once(“langs / $ name / main.php”);)
所以require_once正常工作。 多谢你们!
当您使用include并要求您获得您正在引用的页面的结果时。 当你使用require_once时,它检查并发现页面已经使用require加载,所以它返回true告诉你它已经在某个时候成功加载了。
这就是它,你正试图复制包含。 当你require_once
尚未列入或之前需要的东西,你将得到的返回值。
编辑:通过PHP 5.3.2上的这个简单测试,我第一次使用require_once
时得到返回值。
parent.php:
<?php
$first = require_once("child.php");
var_dump($first);
$second = require_once("child.php");
var_dump($second);
?>
child.php:
<?php
return "foo";
?>
它打印:
string(3) "foo"
bool(true)
我假设你在两个文件上都有开放标记和结束标记? 关于include的PHP文档提到了其中的一些内容。 查看该页面上的示例#5。
它看起来像include
, require
和require_once
都具有相同的功能,只需要发出错误而不是警告,而require_once不重复 - 包含文件。
切勿使用包含return
。 不要返回anting并且不分配任何变量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.