0

我有一个包含以下代码的文件 test.php

<?php
//name of this file is test.php
$foo = "some value";
include_once 'extras.php';
$bar = "another value";
echo "test.php: foo is $foo and bar is $bar <br />";
?>

另一个包含代码的文件

<?php
echo "extras.php: foo is $foo and bar is $bar <br />";
?>

输出表明来自 extras.php 的 echo 语句也包含在 test.php 中,而我作为新手假设 include_once 或 include 构造仅处理变量和函数而忽略其他内容。什么是正确的,请指导。谢谢

4

4 回答 4

1

include_once将整个脚本包含到调用脚本中,只要它之前没有包含过。这包括所有变量、函数、echos...一切。实际上,代码被导入到该include_once行所在的空间中,因此可以included在调用脚本中引用 ed 脚本的变量。

您发布的脚本在include处理 s 后如下所示:

<?php
//name of this file is test.php
$foo = "some value";
echo "extras.php: foo is $foo and bar is $bar <br />";
$bar = "another value";
echo "test.php: foo is $foo and bar is $bar <br />";
?>

请注意,如果找不到文件,脚本不会出错,但不会设置included 脚本中设置的变量。为此,使用require_once.

于 2012-08-11T13:15:25.477 回答
1

您可以将其include_once视为“如果尚未包含该文件,请删除此行并将文件的内容粘贴到此处”。

对我来说有一个有点奇怪的例外,就是这样思考与包含文件中定义的变量的变量范围有关(它们最终会在全局范围内)。更多关于这里

于 2012-08-11T13:18:33.400 回答
1

你更好地理解includeinclude_once

例如,我们可能取 3 个文件;

函数.PHP

<?php
function foo(){
echo 'some code';
}
?>

GLOBALS.PHP

<?php
include('FUNCTIONS.PHP');
foo();
?>

头文件.PHP

<?php
include('FUNCTIONS.PHP');
include('GLOBALS.PHP');
foo();
?>

现在如果你尝试打开HEADER.PHP你会得到一个错误,因为已经GLOBALS.PHP包含FUNCTIONS.PHP了。你会得到一个错误,说function foo()已经在 中声明GLOBALS.PHP,并且我也包含在HEADER.PHP- 这意味着我已经包含FUNCTIONS.PHP了两次。

所以为了确保我只包含FUNCTIONS.PHP一次,我应该使用这个include_once()函数,所以我HEADER.PHP应该是这样的:

<?php
include_once('FUNCTIONS.PHP');
include('GLOBALS.PHP');
?>

现在当我打开时HEADER.PHP,我不会再收到错误了,因为 PHP 知道FUNCTIONS.PHP只包含一次文件。

所以为了避免出错,在你的 php 代码中使用include_once()而不是函数是安全的。include()

如果你知道你的 PHP 代码很乱,那么include_once()使用include().

于 2012-08-11T13:22:36.953 回答
0

您应该首先阅读PHP 手册中的includeinclude_once函数参考。长话短说 - 两个语句基本上合并原始/包含文件中的代码,因此包含文件中的所有内容都在源文件中运行/可用,无论是函数、变量、类、回显语句......(但是,include_once 为该名称已经暗示该文件仅包含一次,如果尚未包含,则第一次包含该文件,无论您在其中放置了多少 include_once 语句)...

于 2012-08-11T13:19:36.393 回答