Denilen çocuğun sürekli mevcut değil ebeveyn statik fonksiyonu

2 Cevap php

Birkaç çocuk sınıflar çağrılabilir gereken bir sınıf statik bir işlevi var. Ben o işlev içinde kullanılabilir olması için çağıran alt sınıf bir sabit gerekir. Diğer yerlerde bu sabitler kullanılabilir olması, çocuk sınıflar o sabiti (php 5.2.9) değerini döndüren bir işlevi var.

Ancak, üst sınıfında, ben fonksiyonu ile ne doğrudan, bu sabit değil erişmek için görünmüyor olabilir. Hatta mümkün php 5.2.9 ya da ben bir argüman olarak geçmesi gerekiyor mı?

Bu kod basit bir versiyonu:

abstract class ParentClass {
    static function DoSomething() {
        $not_working = self::show_const();
        $not_working_either = self::SOME_CONST;

        return 'working';
    }
}

class ChildClass extends ParentClass {
    const SOME_CONST = 'some string';

    function show_const() {
        return self::SOME_CONST;
    }
}

$result = ChildClass::DoSomething();

Edit: üretilen hata:

  • ) Tanımsız yöntemi EbeveynSınıf :: show_const (Call (fonksiyonu)
  • Tanımsız sınıf sabiti 'SOME_CONST' (kullanarak self :: SOME_CONST)

2 Cevap

Ne yazık ki, ne yapmaya çalışıyoruz öncesi 5.3 işe gitmiyor. Buradaki sorun late statik bağlanmasına karşın spesifik bağlanması early statiktir. self, anahtar kelime erken bağlar, bu nedenle semboller çözmek için kullanıldığı yerlerde sadece sınıf arar. Sihirli sabiti __CLASS__ veya fonksiyon get_class() bu gibi bağlayıcı erken statik yapmak, ya da çalışmaz. static::some_method() olarak kullanıldığında, bu nedenle PHP 5,3 geç bağlama ifade etmek için static anahtar genişletilmiş.

Yani 5.3 bu işe:

abstract class ParentClass {
  public static function DoSomething() {
    return static::show_const();
    // also, you could just do
    //return static::SOME_CONST;
  }
}

class ChildClass extends ParentClass {
  const SOME_CONST = 'some string';
  public static function show_const() {
    return self::SOME_CONST;
  }
}

$result = ChildClass::DoSomething();

Sen çocuğu olarak üst sınıf uzatmak yapmak gerekir ::

class ChildClass extends ParentClass {

Edit:

Sen sınıf çocuk 'sürekli var olduğunu bilmiyor ki üst sınıftan çocuk sınıfta sürekli ve yönteme başvurmak için çalışıyoruz. Bu kapsamla ilgili bir sorun. Çocuk değil tam tersi ebeveynin yöntemleri ve sabitleri bakın ama olabilir.