PHP你真的了解INCLUDE和REQUIRE吗?

教育动态2024-09-15 19:04:32匿名

1.注意,这两个是语言结构,而不是方法。类似于echo、print、isset()、empty()、unset()等,它们是语言结构,而不是函数!

2. include 和require 都将外部文件引入到当前上下文中,但它们有一些区别:

2.关于导入的文件:当包含一个文件时,其中包含的代码继承了include和require所在行的变量范围。从那时起,该行调用文件中可用的任何变量也可在被调用文件中使用。但是,包含文件中定义的所有函数和类都具有全局作用域。

EG1:

变量.php

?php

$颜色='绿色';

$fruit='苹果';

测试.php

?php

echo 'A $color $fruit'; //一个

包括“vars.php”;

echo 'A $color $fruit'; //一个青苹果

如果include 出现在调用文件的函数内,则被调用文件中包含的所有代码的行为将如同在该函数内定义一样。所以它将遵循该函数的变量范围。此规则的一个例外是魔术常量,它们在包含发生之前由解析器处理。

3.包含返回值:

处理返回值:包括返回FALSE 并在失败时发出警告。除非包含文件中另有指定,否则成功包含将返回1。您可以在包含文件中使用return 语句来终止文件中程序的执行并返回到调用它的脚本。也可以从包含的文件返回值。 include调用的返回值可以像普通函数一样获取。但是,当包含远程文件时,这不起作用,除非远程文件的输出具有合法的PHP 开始和结束标记(像任何本地文件一样)。您可以在标记内定义所需的变量,这些变量将在包含文件的位置之后可用。因为include 是一种特殊的语言结构,所以它的参数不需要括号。比较它们的返回值时要小心。

EG2:

?php

//不起作用,评估为include(('vars.php')==TRUE),即include('')

if (include('vars.php')==TRUE) {

回显“确定”;

}

//作品

if ((include 'vars.php')==TRUE) {

回显“确定”;

PHP你真的了解INCLUDE和REQUIRE吗?

}

解释:

$bar 的值为1,因为include 运行成功。请注意上述示例中的差异。第一个在包含的文件中使用return,另一个则不使用。如果无法包含该文件,则返回FALSE 并发出E_WARNING 警告。如果包含文件中定义了函数,则这些函数无论是在返回之前还是之后定义,都可以在主文件中独立使用。如果该文件被包含两次,PHP 5 会发出致命错误,因为该函数已经定义,但PHP 4 不会对返回后定义的函数发出错误。建议使用include_once,而不是检查文件是否包含并在包含的文件中有条件返回。

3.包含文件的处理:(这个很重要)

当包含文件时,解析器会离开PHP 模式并在目标文件的开头进入HTML 模式,并在文件结尾处恢复。因此,目标文件中需要作为PHP 代码执行的任何代码都必须包含在有效的PHP 开始和结束标记内。并且执行完成后直接添加到缓冲区中,将导入文件中的变量添加到当前作用域变量链中。

EG3:

//t1.php文件内容

第1234章?5678?php 返回1;9

//t2.php文件内容

?php

包括“t1.php”;

回显$名称;

//开始执行t2.php

将输出:12345678PQS

案例分析:

首先,当包含“t1.php”时;文件后,PHP解析器离开PHP模式并进入HTML模式开始解析。因为HTML模式直接将内容添加到缓冲区中,所以不会先将标签1234添加到缓冲区中,然后执行?php $name='PQS';此处,变量$name 将被添加到t2.php 中include 't1.php' 代码的在线变量作用域中。然后返回HTM模式并将5678添加到缓冲区中。然后当遇到“php return 1;”时,就会开始进入PHP模式执行代码。因为include接受return,所以这里return 1后会加载整个文件。到这里就结束了,返回到t2的代码执行域,这也是为什么最后没有输出9的原因。

演示PHP 将文件输入缓冲区的示例:

//t3.php

1234567

//t4.php

?php

$string=get_include_contents('t3.php');

函数get_include_contents($filename) {

if (is_file($文件名)) {

ob_start();

包括$文件名;

$内容=ob_get_contents();

PHP你真的了解INCLUDE和REQUIRE吗?

ob_end_clean();

返回$内容;

}

返回假;

}

回显$字符串;

//执行t4.php

1234567

案例分析:

函数get_include_contents($filename)

在包含之前打开缓冲区。 include引入t3.php文件时,使用ob_get_contents()方法获取缓冲区数据并赋值给$contents。然后使用ob_end_clean丢弃缓冲区数据,最后返回$contents。最终输出的返回值是通过php运行时t3.php的值。

4.include支持引入URL:

?php

/* 此示例假设www.example.com 配置为解析.php *

* 文件而不是.txt 文件。另外,这里的“Works”意味着变量*

* $foo 和$bar 在包含的文件中可用。 */

//不会工作; www.example.com 未将file.txt 作为PHP 处理

包括'http://www.example.com/file.txt?foo=1bar=2';

//不会工作;在上查找名为“file.php?foo=1bar=2”的文件

//本地文件系统。

包括'file.php?foo=1bar=2';

//有效。

包括'http://www.example.com/file.php?foo=1bar=2';

$foo=1;

$酒吧=2;

包含“文件.txt”; //有效。

用户评论

鹿先森,教魔方

这个标题太棒了!我一直觉得INCLUDE和REQUIRE的区别搞不清楚,这篇文章能不能详细解释一下啊?

    有16位网友表示赞同!

浅巷°

看了标题就有点头疼,我觉得这两个函数对我来说一直是迷,希望能通过这篇文章找到答案。

    有14位网友表示赞同!

幸好是你

以前觉得这两个函数差不多,现在发现其实大有学问,期待作者的深入剖析。

    有10位网友表示赞同!

龙吟凤

PHP入门的时候这两个函数就让我困惑了,希望这篇文章能让我彻底弄懂。

    有12位网友表示赞同!

陌颜

每次写PHP代码,看到INCLUDE和REQUIRE就发憷,希望这篇文章能让我摆脱这种恐惧。

    有13位网友表示赞同!

请在乎我1秒

标题里的“你真的了解”让我想起了自己的无知,这篇博文值得一看。

    有19位网友表示赞同!

关于道别

自从我开始学习PHP,这两个函数就让我头大,希望这篇博文能让我有所突破。

    有19位网友表示赞同!

挽手余生ら

PHP的这两个函数太容易混淆了,期待作者能给出清晰的解释。

    有19位网友表示赞同!

烟花巷陌

这个标题太吸引人了,我之前一直以为INCLUDE和REQUIRE是一样的,现在看来我得重新认识它们了。

    有11位网友表示赞同!

经典的对白

我觉得这个标题有点夸张,但我也很好奇,这两个函数真的有那么复杂吗?

    有19位网友表示赞同!

雁過藍天

每次写PHP代码,我都会反复确认是用了INCLUDE还是REQUIRE,希望这篇文章能让我更自信。

    有17位网友表示赞同!

莫阑珊

PHP的这两个函数让我很头疼,但我相信这篇文章能让我找到解决问题的方法。

    有8位网友表示赞同!

哥帅但不是蟋蟀

这个标题让我想起了自己曾经的困惑,希望这篇文章能帮我解决这些问题。

    有14位网友表示赞同!

墨城烟柳

我觉得这两个函数的区别不大,但每次写代码都会犹豫,希望这篇文章能让我有更深的理解。

    有9位网友表示赞同!

┲﹊怅惘。

这个标题让我有了阅读的冲动,毕竟PHP是我在用的语言,对这两个函数的了解还是太少。

    有15位网友表示赞同!

龙吟凤

虽然我对PHP不是很精通,但这两个函数一直是我心中的痛点,希望这篇文章能让我有所收获。

    有16位网友表示赞同!

青山暮雪

我觉得这个标题有点过时了,但作为一个PHP开发者,我还是想看看这个问题的最新讨论。

    有15位网友表示赞同!

冷月花魂

PHP的这两个函数让我感到困惑,希望这篇文章能让我找到答案,也希望能帮助到其他有同样困惑的人。

    有13位网友表示赞同!

孤街浪途

这个标题让我想起了自己在学习PHP时的迷茫,希望这篇文章能让我有所启发,也希望能让更多人受益。

    有8位网友表示赞同!

相关推荐