在PHP中,include()究竟是如何工作的


In PHP, how does include() exactly work?

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

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

请参阅手册。

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

include是否表现为复制粘贴:

test.php

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

test.txt

echo $test;

上面的例子将输出:

**echo $test;**

如果要包含PHP文件,仍然需要有PHP标记<?php?>

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

include 'test.php';

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

<?php
echo "hello";
include('foo.php');
echo "world";

成为(理论上的)

<?php
echo "hello";
?>
{CONTENT OF foo.php}
<?php
echo "world";

然而,所有这些都发生在内存中,而不是磁盘上。没有更改任何文件或任何内容。

这取决于如何包含code.php文件。如果你将code.php文件包括在page1.php和page2.php中,那么你将可以访问它的vars,它实际上只是"复制和粘贴"(beaware只是用来让它更容易理解,因为上面解释了它的实际动态)文件,但是如果你像这样链接

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

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

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

因此,为了inherit,code.php在page1.phppage2.php上的函数一定要做这样的事情:

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

然后它会如你所期望的那样工作。所以只是一些需要记住的东西。

Include的行为与复制粘贴不同。

以下是使用PHP Strict Type Declarations 的演示

<?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不像复制/粘贴那样工作

为了进一步了解,
关于如何执行PHP脚本的简短回答&
关于include/request在php

中的实际作用的更容易理解的解释
include('./code.php'); // The Same As Pasting The Code From Code.PHP.

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