Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 哪些问题包括或需要一次性解决?_Php_Include - Fatal编程技术网

Php 哪些问题包括或需要一次性解决?

Php 哪些问题包括或需要一次性解决?,php,include,Php,Include,来自php手册 Include_once可能有助于避免函数重新定义、变量值重新分配等问题 好的,所以include_曾经解决了函数重新定义、变量值重新分配等问题。但是为什么它们首先是一个问题呢 我试图了解在重新定义函数或重新分配变量值时,除了由于额外的输入/输出和处理而导致的性能下降外,涉及到什么样的风险 这是因为php解析器混淆了要加载/使用哪个版本的函数,还是函数的原始版本在重新定义后丢失了?还有什么,变量重新分配呢 我确实知道在哪里使用includevsinclude\u once想象一下

来自php手册

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

好的,所以include_曾经解决了函数重新定义、变量值重新分配等问题。但是为什么它们首先是一个问题呢

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

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


我确实知道在哪里使用
include
vs
include\u once

想象一下下面的include文件,
hello.php

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

$a = 0;
include 'hello.php';

$a = 1;
hello();

include 'hello.php';

hello();
echo $a; // $a = 0, not 1
现在想象一下下面的文件,
index.php

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

$a = 0;
include 'hello.php';

$a = 1;
hello();

include 'hello.php';

hello();
echo $a; // $a = 0, not 1
您的代码现在将有一个致命错误,因为函数已经定义了两次。使用
include\u一次可以避免这种情况,因为它只包含
hello.php
一次。另外,对于
变量值重新分配
$a
(如果代码编译)将重置为0


从注释中,请考虑这一个侧面的答案——如果你正在寻找一些需要重置一组变量的东西,我会用一个类来使用这个类,比如“代码>重置< /Cord>”,如果你不想实例化它,你甚至可以使它静态化,比如::

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

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


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

假设您有一个include脚本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
?>


发生的情况是,如果在代码执行中修改变量,然后再次包含定义它们的文件,那么就是在更改它们的内容。include\u once将确保不会发生这种情况并抛出错误。

您不能定义一个函数两次,您将得到一个致命错误。@Pekka웃 - 我理解这一点,但这是否会导致php在允许重新定义的情况下对加载哪个版本的函数感到困惑?@user481913不会感到困惑,就我所知,在任何语言中都不允许对函数进行重新定义。@rudiviser Ruby允许您重新定义函数:)@BaylorRae'有趣:)但它仍然会保留对原始函数的引用,对吗?PHP当然不会这么做。正是我想的那样。。。但是,如果我有兴趣做这样的事情,或者如果我暂时需要为变量提供/使用其原始值以外的其他值,又有什么错呢?我强烈建议您不要滥用include。这可能是非常危险的,并会导致难以调试的意外结果。无论如何你能说得更具体一点吗?我脑子里想不出一个具体的例子,除了为什么我要注意不要重新定义函数/重新分配值等等。。。我会回来,如果我能拿出一个具体的情况…是的,与调试此类代码相关的歧义可能是避免这种情况的一个原因。。。仍在考虑其他陷阱…是的,与下面提到的@Zarathos非常相似。。。那么,如果$a重置为0,会有什么问题或风险?我认为其中一个原因可能是调试这样的代码很困难。。。如果值确实像您提供的上述示例中那样发生变化,那么风险到底是什么?本质上没有风险,只是由于明显的原因,它非常不值得推荐。间接风险可能是多个开发人员期望包含一个包含类的文件,并最终在过程中重置大量变量(假设该文件也定义了
$myvar
,并且开发人员完全单独使用
$myvar
)。在全局范围内定义这样的东西显然也不被推荐,因此我们有OOP:)我现在脑子乱七八糟。。。我需要休息一下,过一会儿再重新考虑一下,让它沉入我的脑海。。。简而言之,我认为我确实同意/理解你提供的一些理由,但我只是需要它来说服我,我完全理解背后的理由。。。非常感谢和+1提供了一个上下文…@user481913没问题,请参阅一个小的更新。我想这就是你想要达到的目的。。