包括,要求和要求

今天我试图包含返回对象的文件。 我总是使用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更安全,因为它不会重复include。

谢谢。

编辑:

但是当我使用require_once时,我也得到了bool(true)。 所以require_once只返回include的结果,而不是它的内容?

EDIT2:

大声笑。 我没有注意到,早些时候我在我的类中需要这个文件,这个文件是在这个代码执行之前创建的($ this-> file = require_once(“langs / $ name / main.php”);)

所以require_once就像它应该那样工作。 多谢你们!


当你使用include并要求你得到你所引用的页面的结果被包含。 当你使用require_once时,它会检查并看到页面已经使用require加载,所以它返回true以告诉你它已经在某个时候成功加载了。


就是这样,你试图复制include。 当你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)

我假设你在这两个文件上都有打开和关闭标签? 关于PHP的文档包含了一些这方面的内容。 查看该页面上的示例#5。

它看起来像includerequirerequire_once都具有相同的功能,只是需要发出错误而不是警告,并且require_once不会重复 - 包含文件。

链接地址: http://www.djcxy.com/p/58025.html

上一篇: Include, require & require

下一篇: What is the difference between include and require in Ruby?