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

関数が 2 回定義されているため、コードに致命的なエラーが発生します。を使用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
?>

コードexectionで変数を変更してから、それらを定義するファイルをもう一度含めると、その内容が変更されます。include_onceは、これがエラーをスローして発生しないことを保証します。

于 2013-01-19T22:27:36.500 に答える
0

これにより、ページの複数回の読み込みが停止します。通常、これをページの上部で使用して、init、関数、クラスファイルなどを取り込みます。

ページ内のページを動的にロードする場合に特に便利です。

于 2013-01-19T22:23:08.457 に答える