1

私は次のプログラム構造を持っています:

Root directory:-----index.php
                       |-------TPL directory
                                 |-------------header.php
                                 |-------------index.php
                                 |-------------footer.php
php file loading structure:

Root directory:index.php ----require/include--->tpl:index.php
                                                      |----require/include-->header.php
                                                      |----require/include-->footer.php

ルート index.php :

    <?php
function get_header(){
    require('./tpl/header.php');
}

function get_footer(){
    require('./tpl/footer.php');
}

$a = "I am a variable";

require('./tpl/index.php');

TPL:index.php:

    <?php
get_header();//when I change require('./tpl/header.php'); variable $a can work!!
echo '<br />';
echo 'I am tpl index.php';
echo $a;
echo '<br />';
get_footer();//when I change require('./tpl/footer.php'); variable $a can work!!

TPL:header.php:

    <?php
echo 'I am header.php';
echo $a;//can not echo $a variable
echo '<br/>';

TPL:footer.php:

    <?php
echo '<br />';
echo $a;//can not echo $a variable
echo 'I am footer';

何らかの理由で、関数を使用して header.php と footer.php を要求すると、変数 $a がエコーされません。header.php または footer.php を単独で使用すると問題なく動作します。何が問題なのかわかりません。ここで何が問題だと思いますか?

4

3 に答える 3

4

あなたの問題はおそらく、関数のスコープにグローバル変数が自動的に含まれないことです。以下の関数の例の$aように、グローバルに設定してみてください。global $a;get_header()

function get_header(){
    global $a; // Sets $a to global scope
    require('./tpl/header.php');
}
于 2013-06-02T14:47:26.163 に答える
1

関数内で include を使用すると、コードがその関数に直接インクルードされます。したがって、変数はその関数でローカルにアクセス可能な変数であり、関数の外部では設定されません。

関数なしでrequire/includeすると、 $a はグローバル変数になります。

于 2013-06-02T14:48:15.497 に答える
0

変数をグローバルにする

グローバル $YourVar;

于 2013-06-02T14:55:53.863 に答える