PHP fonksiyon ve değişken kalıtım

4 Cevap

Birisi bana PHP sınıfları değişken / fonksiyon kalıtımı anlamak yardımcı olabilir.

Benim ana sınıfı, tüm alt sınıfları tarafından kullanılan bir işlevi vardır. Ancak her çocuk sınıflar bu fonksiyonu kendi değişken kullanmak gerekiyor. Ben statik çocuk derslerinde işlevini çağırmak istiyorum. Alt sınıflarında değerlere karşı Aşağıdaki örnekte, "dünya 'gösterilir.

Herkes çocuk sınıflar değerleri yankı işlevini nasıl alabilirim açıklayabilir. Ben arayüzleri kullanarak olmalıdır? Bu (nedeniyle PHP öncesi 5.3.0 sürümünü kullanarak bana kullanılamaz olan) bağlanma geç statik ile ilgili bir şey var mı?

class myParent
{
    static $myVar = 'world';
    static function hello()
    {
    	echo self::$myVar;	
    }
}

class myFirstChild extends myParent
{
    static $myVar = 'earth';
}

class mySecondChild extends myParent
{
    static $myVar = 'planet';
}

myFirstChild::hello();
mySecondChild::hello();

4 Cevap

Evet, bunu yapamam. Ve bildirimleri static $myVar onlar statik kesin çünkü, herhangi bir şekilde birbirleriyle etkileşim, ve evet, 5.3.0 olsaydı etrafında alabilir, ama bu yüzden 'olamaz yapmıyoruz t.

Benim tavsiyem sadece bir statik olmayan değişken ve yöntemi kullanmaktır.

Bunu şöyle yapabiliriz:

class myParent
{
    var $myVar = "world";
    function hello()
    {
        echo $this->myVar."\n";      
    }
}

class myFirstChild extends myParent
{
    var $myVar = "earth";
}

class mySecondChild extends myParent
{
    var $myVar = "planet";
}

$first = new myFirstChild();
$first->hello();

$second = new mySecondChild();
$second->hello();

Bu kod yazdırır

earth
planet

PHP 5.3 ile olsaydı, bu echo deyimi çalışmak:

echo static::$myVar;

Bu sizin için kullanılamaz çünkü Ama, tek (güzel) opsiyon hello() fonksiyonunu not statik yapmaktır.

I want to call the function in the child classes statically.

Bu gerçekten günün ^ ^ sonuna kadar fındık getireyim sıkıntılar içine sürücü olacaktır (Zaten var, belki ^ ^)

Defintly azından PHP static" özellikleri / yöntemleri öneriyoruz 5.3

Ve PHP 5.3 oldukça yeni olduğu gibi, muhtemelen bir kaç ay önce barındırma hizmeti mevcut olmayacaktır ...