【问题标题】:In PHP, how does include() exactly work?在 PHP 中,include() 究竟是如何工作的?
【发布时间】:2012-08-24 23:16:18
【问题描述】:

include('./code.php'); 是如何工作的?我知道这相当于将代码直接“粘贴”在包含发生的位置,但是,例如:

如果我有两个页面,page1.phppage2.php,我需要在其中操作 ./code.php 中的不同变量和函数,include() 是否创建 ./code.php 的副本,或者它本质上是否链接回到实际页面./code.php

【问题讨论】:

标签: php


【解决方案1】:

See the manual.

如果您include 一个文本文件,它将在文档中显示为文本。

include 确实表现得像复制粘贴:

test.php

<?php
echo '**';
$test = 'test';
include 'test.txt';
echo '**';
?>

test.txt

echo $test;

上面的例子会输出:

**echo $test;**

如果你要包含 PHP 文件,你仍然需要 PHP 标签 &lt;?php?&gt;

另外,通常括号不会放在include 之后,如下所示:

include 'test.php';

【讨论】:

  • 在您的示例中,它的行为与复制和粘贴完全相同。
  • @Paul - 不,它没有。如果它的行为类似于复制和粘贴,结果将是:**test**
  • 不,它是一个 .txt 文件。更改扩展名 .php 看看会发生什么。
  • 顺便说一句,您也可以从包含/必需的文件中return 直接返回包含脚本,但我从未发现有任何用处...
  • 从文件中返回一个数组是许多框架对基于文件的数组列表(如配置文件)所做的。这是一个非常有用的功能,即使它只有 1% 的时间有用。
【解决方案2】:

基本上,当解释器遇到include 'foo.php'; 语句时,它会打开指定的文件,读取其所有内容,用另一个文件中的代码替换“include”位并继续解释:

<?php
echo "hello";

include('foo.php');

echo "world";

变成(理论上的)

<?php
echo "hello";

?>
{CONTENT OF foo.php}
<?php

echo "world";

但是,所有这些都只发生在内存中,而不是磁盘上。没有文件被更改或任何东西。

【讨论】:

    【解决方案3】:

    这取决于您如何包含code.php 文件。如果您将 code.php 文件包含到 page1.php 然后 page2.php 那么您将可以访问它的 vars 并且它实际上只是“复制和粘贴”(注意这只是用来使其更容易理解,因为实际上面解释了动态)但是如果你像这样链接文件:

    [code.php]
    include('page1.php');
    include('page2.php');
    

    那么 code.php 将可以访问 page1.php 中的所有变量,但是:

    • page1.php 将无法访问 code.php 中的变量
    • page2.php 将无法访问 code.php 中的变量

    所以为了inherit code.php 的功能性而不是page1.phppage2.php 一定要这样做:

    [page1.php]
    include('code.php');
    
    [page2.php]
    include('code.php');
    

    然后它将按您的预期工作。所以只是要记住一些东西。

    【讨论】:

      【解决方案4】:

      包含的行为不像复制粘贴。

      这是一个使用 PHP 严格类型声明的演示

      <?php
      
      // function.php (file)
      
      declare (strict_types = 1);
      
      function sum(int $a, int $b)
      {
        return $a + $b;
      }
      
      /**
       * This will throw TypeError: 
       */
      
      // echo sum(5.2, 5);
      

      但是,如果我从外部文件调用此函数

      <?php
      
      // caller.php (file)
      
      require_once 'function.php';
      
      /**
       * This will Work instead of throwing a TypeError:
       */
      
      echo sum(5.2, 5);
      

      为添加声明语句的文件启用严格类型(function.php)

      它不适用于从外部文件 (caller.php) 进行的任何函数调用
      因为 PHP 在评估严格类型时总是会服从调用者。

      Require 不像复制/粘贴那样工作

      如需进一步了解,
      Short answer on how PHP script is Executed &
      A more comprehensible explanation on what include/require really does in php

      【讨论】:

        【解决方案5】:
        include('./code.php'); // The Same As Pasting The Code From Code.PHP.
        

        在任何情况下它都不会重定向到 Code.php。

        【讨论】:

          猜你喜欢
          • 2023-04-01
          • 2012-08-02
          • 2011-06-26
          • 2021-08-15
          • 2012-06-08
          • 2011-10-11
          • 2013-07-05
          • 1970-01-01
          相关资源
          最近更新 更多