【问题标题】:Include, require & require_once包括、要求和要求一次
【发布时间】:2011-02-27 19:48:07
【问题描述】:

今天我尝试包含返回对象的文件。我总是使用 require_once,但是现在我注意到它的奇怪行为。

文件 main.php

$lang = false;
$lang->name = "eng";
$lang->author = "Misiur";
$lang->text = "Text is test";
$lang->undefined = "Undefined";
return $lang;

文件索引.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 正常工作。谢谢大家!

【问题讨论】:

  • 你为什么要使用return?摆脱它
  • 没有它我没有 $lang 对象内容,只需要结果
  • 天啊,别傻了。只是摆脱回报!不要使用它。

标签: php object include require require-once


【解决方案1】:

切勿将return 与包含一起使用。 不返回anting,也不分配任何变量。

【讨论】:

  • 那我该怎么做呢?在它的类中创建,然后在包含创建对象之后?或者怎么做?
  • @Misiur 你可以随心所欲。 你儿子不需要任何特殊的代码来处理 require 只需将它写在一个文件中,然后将要分离的代码剪切并粘贴到另一个文件中,与 就是这样
  • 解释一下您为什么认为这是一个坏主意可能会有所帮助。
【解决方案2】:

就是这样,您正在尝试复制包含。当您require_once 之前没有包含或需要的东西时,您将获得返回值。

编辑:通过 PHP 5.3.2 上的这个简单测试,我在第一次使用 require_once 时得到了返回值。

父.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)

【讨论】:

    【解决方案3】:

    我假设您在两个文件上都有打开和关闭标签? include 上的 PHP 文档提到了其中的一些内容。查看该页面上的示例 #5。

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

    【讨论】:

      【解决方案4】:

      当你使用 include 和 require 时,你会得到你引用的页面被包含的结果。当您使用 require_once 时,它​​会检查并看到页面已经使用 require 加载,因此它返回 true 以告诉您它在某个时间点已成功加载。

      【讨论】:

        猜你喜欢
        • 2012-10-17
        • 2011-04-02
        • 2013-11-13
        • 2018-09-13
        • 2011-04-30
        • 2012-05-25
        • 2011-01-11
        • 2015-03-31
        • 1970-01-01
        相关资源
        最近更新 更多