PHP 5.2 Sınıf miras: uzatma sınıfındaki geçersiz kılma statik değişken?

0 Cevap php

Ben bea bir taban sınıfını genişleten bir sınıf statik bir değişken seti ... temel sınıf kullanmak mümkün gerekiyor.

Bu düşünün:

class Animal {
    public static $color = 'black';

    public static function get_color()
    {
        return self::$color;
    }
}

class Dog extends Animal {
    public static $color = 'brown';
}

echo Animal::get_color(); // prints 'black'
echo Dog::get_color(); // also prints 'black'

Bu PHP 5.3.x de harika çalışıyor (Dog::get_color() baskı 'kahverengi') bu bağlama geç statik beri. Ama benim üretim sunucu PHP 5.2.11 çalışır ve bu yüzden benim komut dosyası uyum gerekir.

Bu sorunu çözmek için biraz güzel çözüm var mı?

Cheers!
Christoffer

EDIT: The goal

Aşağıda belirtildiği gibi, bu Ben başarmak için çalışıyorum ne çok basitleştirilmiş bir örnektir. Benim sorunu çözmek için kullandığı iki seçenek (ve sorunun kendisi) size eğer birisi benden daha farklı bir çözüm olabilir ..

Ben, "find_by" ve "find_all" (tüm statik) "bulmak" gibi işlevleri içeren bir temel veritabanı modeli inşa etmişlerdir.

PHP 5.3 'te şu anda denilen sınıfın adını belirlemek için kullanın ve sonra doğru veritabanı tabloya karşı eşleştirmek için kullanabilirsiniz get_called_class() adında bir fonksiyonu var. Eski sınıf User users işaret eder.

get_called_class() PHP 5.2.x var ve ben buldum hack uygulamaları çok güvenilmez değildir. Sonra sınıf adını içeren tüm modeli sınıfları statik bir değişken kullanarak bu seçeneği döndü.

0 Cevap