2012-04-03 10 views
0

B.php:PHP、クラス内クラス、バグ?

class B 
    { 
    function show() { echo 'works'; } 
    } 

A.php

class A 
{ 

public static function defineB() 
{ 
    include "b.php"; 
} 

} 


A::defineB(); 
$b = new B; 
var_dump($b); 

オブジェクト(B)#1(0){}、

)(:: defineBがなければ。 - 致命的なエラー:クラス 'B'が見つかりませんでした。 別のファイルを含めずにクラスを定義する場合 - 致命的なエラー:クラス宣言がネストされていない可能性があります

ですか?

+0

これはバグですが、PHPではそうではありません。エラーメッセージにはクラス宣言をネストすることはできません。 – JJJ

+1

可能な複製[他のクラスの中にphpクラスを作成することができますか?](http://stackoverflow.com/questions/1583140/is-it-allowed-to-create-a-php-class-inside-another-クラス) – JJJ

+0

どのバージョンのPHPを使用しますか? 'include()'にはグローバルな名前空間のクラスが含まれているので、[この質問は](http://stackoverflow.com/questions/2608432/php-nested-classes-work-sort-of)与えられます。 – CodeCaster

答えて

3

これはバグではなく、デフォルトで正しく動作しています。

ファイルを使用する前にインクルードする必要があります。これにより痛みが多すぎる場合は、コードの先頭にhttp://www.php.net/manual/en/language.oop5.autoload.phpまたはhttp://www.php.net/manual/en/function.spl-autoload-register.phpを使用できます。

+0

バグではない場合、なぜ私はエラーがありません - 致命的なエラー:クラスの宣言は入れ子にされていない可能性がありますか?コードはなぜ機能するのですか? –

0

PHPでは、(Javaのように)クラスをネストすることはできません。したがって、「クラス宣言はネストされていない可能性があります。キーワードは名前空間です。クラスAのクラスBを含むことは、クラスAの名前には影響しません。これはまだ... "A"で、 "B \ A"、 "B.A"またはsthではありません。 :)