2012-01-25 4 views
7

静的プロパティにオブジェクトを割り当てるのは不正ですか?PHP:静的プロパティへのオブジェクトの割り当て、それは違法ですか?

以下のコードでHTTP 500エラーが表示されます。

require_once('class.linkedlist.php'); 

class SinglyLinkedlistTester { 
    public static $ll = new Linklist(); 
} 

HTTPエラー500(内部サーバーエラー):サーバーが要求を実行しようとしている間に予期しない条件が発生しました。

注:静的変数への代入は、文字列のようなオブジェクトでは問題ありません。一例として 、

public static $ll = 5; //no issue 

もclass.linkedlist.phpにはコードの問題は存在しません。

答えて

9

クラスプロパティ宣言で新しいオブジェクトを作成することはできません。これを行うには、コンストラクタを使用する必要があります。

class SinglyLinkedlistTester { 
    public static $ll; 

    public function __construct() { 
     static::$ll = new Linklist(); 
    } 
} 

編集:また、あなたがPHPの糸くずフラグ(-l)を使用してそれらを実行せず、エラーのためにあなたのファイルをテストすることができます。

php -l your_file.php 

この意志ファイルに構文エラーまたは構文解析エラーがあるかどうかを教えてください(この場合、解析エラーでした)。

+0

静的:: $ LLまたは自己:: $ LLを? –

+0

リファレンス:http://php.net/manual/en/language.oop5.static.php – Josh

+0

@Josh:実際、[this](http://www.php.net/manual/en/language.oop5。 late-static-bindings.php)がおそらくもっと役に立ちます。 – FtDRbwLXw6

1

あなたは、あなたがオブジェクトの各インスタンス化に静的プロパティをオーバーライドしていないことを、世話をするため、実行する必要があります。

class SinglyLinkedlistTester { 
    private static $ll; 

    public function __construct() { 
     if (!self::$ll) self::$ll = new Linklist(); 
    } 
} 
関連する問題