1

私は PHP と OOP を学び始めていますが、行き詰まっています。以下に貼り付ける3つの異なるphpファイルがあります。特定の問題は、コードの後に​​記載されています。

File1.php :

<?php
class Page{
    public $intro;
    public $article;

}

$TD = new Page($intro, $article); 


$TD->intro="I'm the intro";
$TD->article="I'm an article";
?>

File2.php

<?php
function test($page){
switch($page){
    case "A":
        include "file1.php";
        break;
    case "B":
        include "anotherfile.php";
        break;
    }
}
?>

File3.php (何かを印刷する必要があるもの):

<?php
$page="A";
include "file2.php";

test($page);

echo $TD->intro;
echo $TD->article;
?>

エコーできません ($TD が未定義であると言います) が、テストを行ったところ、file1.php ($TD オブジェクトが定義されている場所) が効果的に読み込まれているようです。さらに、問題のあるエコーを file1.php に貼り付けてこのページをロードすると、エコーが機能します。

それは明らかなことだと思いますが、私はまだそれを理解することができません。

返信ありがとうございます。最後までお読みいただきありがとうございます!!! :)

4

1 に答える 1

1

インクルードは関数のスコープ内にあるため、インクルードで定義されている変数は関数内でのみ表示されます。

function test($page){
    switch( $page) {
        case "A":
            include "file1.php";
            // $TD is in scope here, but not outside this scope
        break;
    }
}

簡単な修正は、関​​数global $TD;の先頭に追加するtest()ことです。

于 2013-06-30T19:44:42.717 に答える