2012-01-25 30 views
7

Bazı nesnelere statik özellik atamak yasa dışı mı?PHP: Statik özellik için nesne ataması yasa dışı mı?

Aşağıdaki kodda HTTP 500 hatası alıyorum.

require_once('class.linkedlist.php'); 

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

HTTP Hata 500 (Dahili Sunucu Hatası): Sunucu isteği gerçekleştirmeyi denerken beklenmedik bir koşulla karşılaşıldı.

Not: Dize olmayan nesne, statik değişkene int ataması gibi bir sorun yok. Örnek olarak ,

public static $ll = 5; //no issue 

Ayrıca class.linkedlist.php hiçbir kod sorunu yoktur.

cevap

9

Sınıf özellik beyanlarında yeni nesneler oluşturamazsınız. Bunu yapmak için yapıcı kullanmak zorunda:

class SinglyLinkedlistTester { 
    public static $ll; 

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

Düzenleme: Ayrıca, PHP'nin tiftik bayrağı (-l) kullanarak bunları yürütme olmadan hatalara karşı dosyaları test edebilirsiniz:

php -l your_file.php 

Bu irade Dosyanızda sözdizimi veya ayrıştırma hataları olup olmadığını söyleyin (bu durumda, bir ayrıştırma hatasıydı).

+0

statik :: $ II- ve öz :: $ ll? –

+0

Referans: http://php.net/manual/en/language.oop5.static.php – Josh

+0

@Josh: Aslında, bu [http://www.php.net/manual/en/language.oop5. Geç statik-bindings.php) muhtemelen daha yararlıdır. – FtDRbwLXw6

1

bu nedenle yapmak, bir nesnenin her örnekleme statik özelliği geçersiz kılmaz, dikkat etmelisiniz:

class SinglyLinkedlistTester { 
    private static $ll; 

    public function __construct() { 
     if (!self::$ll) self::$ll = new Linklist(); 
    } 
} 
İlgili konular