2

来自 php 手册

include_once 可能有助于避免函数重新定义、变量值重新分配等问题。

好的,所以 include_once 解决了函数重新定义、变量值重新分配等问题,但为什么它们首先会成为问题?

我试图了解重新定义函数或重新分配变量值涉及哪些风险,除了由于额外的输入/输出和处理导致的性能下降?

是因为 php 解析器混淆了要加载/使用哪个版本的函数,还是函数的原始版本在重新定义后丢失了?还有什么以及变量重新分配呢?

我确实知道在哪里使用includevs include_once

4

3 回答 3

4

想象一下以下包含文件hello.php

function hello()
{
    return 'Hello World';
}

$a = 0;

现在想象以下文件index.php

include 'hello.php';

$a = 1;
hello();

include 'hello.php';

hello();
echo $a; // $a = 0, not 1

您的代码现在将出现致命错误,因为该函数已定义两次。使用include_once会避免这种情况,因为它只会包含hello.php一次。此外,对于variable value reassignment, $a(如果代码编译)将被重置为 0。


从评论中,请考虑这是一个侧面答案- 如果您正在寻找需要多次重置一组变量的东西,我希望使用一个带有类似方法的类Reset,您甚至可以将其设为静态如果你不想实例化它,像这样:

public class MyVariables
{
    public static $MyVariable = "Hello";
    public static $AnotherVariable = 5;

    public static function Reset()
    {
        self::$MyVariable = "Hello";
        self::$AnotherVariable = 5;
    }
}

用法如:

MyVariables::$MyVariable = "Goodbye";
MyVariables::Reset();
echo MyVariables::$MyVariable; // Hello
于 2013-01-19T22:21:54.450 回答
1

假设您有一个包含脚本 vars.inc.php:

<?php

    $firstname = 'Mike';
    $lastname = 'Smith';

?>

然后你有一个脚本 script.php:

<?php

    echo "$firstname $lastname"; // no output

    include('vars.inc.php');
    echo "$firstname $lastname"; // Mike Smith

    $firstname = "Tim";
    $lastname = "Young"; 
    echo "$firstname $lastname"; // Tim Young

    include('vars.inc.php');
    echo "$firstname $lastname"; // Mike Smith
?>

发生的情况是,如果您在代码执行中修改 var,然后再次包含定义它们的文件,那么您正在更改它们的内容。include_once 将确保这永远不会发生抛出错误。

于 2013-01-19T22:27:36.500 回答
0

它会阻止您多次加载页面。通常,您将在页面顶部使用它来引入您的 init、函数、类文件等。

如果您在页面内动态加载页面,则特别有用。

于 2013-01-19T22:23:08.457 回答