包括、要求和需要一次
今天我尝试包含返回对象的文件。我总是使用 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 更安全,因为它不会重复包含。
谢谢。
编辑:
但是当我使用 only require_once 时,我也得到 bool(true) 。那么 require_once 只返回包含的结果,而不返回它的内容?
编辑2:
哈哈。我没有注意到,早些时候我在我的类中需要这个文件,该文件是在代码执行之前创建的($this->file = require_once("langs/$name/main.php");)
所以 require_once 起作用了正如它应该的那样。谢谢你们!
Today I've tried to include file that returns object. I always use require_once, however now I've noticed weird behavior of it.
File main.php
$lang = false;
$lang->name = "eng";
$lang->author = "Misiur";
$lang->text = "Text is test";
$lang->undefined = "Undefined";
return $lang;
File 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);
Result
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)
Why is it like that? I thought that require and require_once are same thing, only require_once is more safe because it won't duplicate include.
Thanks.
Edit:
But when i use only require_once, I get bool(true) too. So require_once returns only result of include, not it's content?
Edit2:
LOL. I haven't noticed, that earlier I had required this file inside of my class which is created before this code execution ($this->file = require_once("langs/$name/main.php");)
So require_once worked as it should. Thanks guys!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
当您使用 include 和 require 时,您会得到您引用的页面被包含的结果。当您使用 require_once 时,它会检查并发现该页面已使用 require 加载,因此它返回 true 告诉您它在某个时刻已成功加载。
When you use include and require you get the result of the page you're referencing being included. When you use require_once it checks and sees that the page has already been loaded using require, so it returns true to tell you that it has been loaded successfully at some point.
正是如此,您正在尝试复制包含。当您
require_once
之前未包含或需要的内容时,您将获得返回值。编辑:通过 PHP 5.3.2 上的这个简单测试,我在第一次使用
require_once
时得到了返回值。Parent.php:
child.php:
它打印:
That's exactly it, and you're trying to duplicate include. When you
require_once
something that hasn't been included or required before, you will get the return value.EDIT: With this simple test on PHP 5.3.2, I get the return value when using
require_once
for the first time.parent.php:
child.php:
It prints:
我假设您在这两个文件上都有打开和关闭标签?关于 include 的 PHP 文档提到了其中的一些内容。查看该页面上的示例#5。
看起来
include
、require
和require_once
都具有相同的功能,只是 require 发出错误而不是警告,而 require_once 则不会发出错误t 重复包含文件。I'm assuming that you do have open and closing tags on both files? The PHP documentation on include mentions some of this. Check out example #5 on that page.
It looks like
include
,require
, andrequire_once
all have the same functionality, just that require emits an error instead of warning, and require_once doesn't duplicate-include a file.切勿将
return
与包含一起使用。不返回 anting 也不分配任何变量。
Never use
return
with includes.Do not return anting and do not assign any variable.