を含み、これは動作しない。拡張クラスファイル
test.phpを:
include_once('test-include.php');
$main = new mainClass();
//======================================================================
class mainClass {
function __construct() {
$test2 = new Test2();
echo $test2->var;
}
}
//======================================================================
class Test2 extends Test1 { // test2
var $var = 'b';
}
試験include.php:
// this does get printed out, so I know the include statement is working
echo 'DEBUG: this is the test-include.php file<br>';
//======================================================================
class Test1 { // test1
var $var = 'a';
}
以下のエラーが発生します。
この一方動作しない
test2.php:
// this is in the same position as the include statement in test.php
//======================================================================
class Test1 { // test1
var $var = 'a';
}
$main = new mainClass();
//======================================================================
class mainClass {
function __construct() {
$test2 = new Test2();
echo $test2->var;
}
}
//======================================================================
class Test2 extends Test1 { // test2
var $var = 'b';
}
が
はなぜそれを拡張して、子クラスが見つからないために、インクルードファイルで原因基底クラス(Test1と)を置くん ?つまり、最初の例では、インスタンス化しようとするとTest2が見つからないため、失敗しています。このようなことは、まだコード実行フローでTest2に慣れていないので意味があります。しかし、2番目の例(include文なし)では、これは似たような状況ですが、エラーはありません(まだコード実行のTest2クラスに達していません)。
ああ、バージョン5.1.6 。
UPDATE:
OK、DAFFが正しいか - 私はtest.phpを例に最後まで
$main = new mainClass();
を移動した場合、それが動作します。上記の行が最後でなければ、なぜそれがうまくいかないのか知りたいのですが、最後に$ main = new mainClass()行がないtest2.phpの例でうまくいきます。
UPDATE 2:
OK、私はinclude_once
の代わりにrequire, require_once
とinclude
を使用して試してみた - これらの作品のどれも。また、私はtest-include.phpファイルにテスト用のecho文を追加し、インクルード文が動作していることを知ったので、プリントアウトします(存在しないインクルードファイルについてはエラーが出ません)。
本当にインクルードが機能していますか? – Rufinus
どうして失敗するのですか?コンパイルエラー、実行エラー、エラーはないが間違った結果? – Lucky
"require"を使用すると何が表示されますか? "echo"これはtest-include.phpです; " "test-include.php"の先頭に? "test-include.php"は同じディレクトリにありますか?あなたのインクルージョンパスにありますか? – GZipp