parent :: örneği sınıfları

3 Cevap

php hiçbir $parent->function(); sözdizimi neden orada olduğunu merak ediyordum, ama bunun yerine bir statik sınıf içinde kullanılan benziyor ki parent::function(); kullanabilirsiniz. Ben bazı php oop temel eksik?

3 Cevap

Ben garip görünüyor itiraf - ve ^ ^ kılavuzda şey özledim vermedi

Ancak:

  • Generally, when the child class re-defines a method that's already defined in the parent class, you want the child's method to totally override the parent's one
    • __construct hariç, itiraf - bu ebeveynin __construct yöntemi kendiniz aramak zorunda kılavuzda açıkça söyleniyor bu yüzden muhtemelen.
  • Statik olmayan yöntemler ile çalışırken genellikle konuşan, sadece $this çocuk veya ebeveyn sınıfının ya aynı örneğinde yöntemleri çağırmak için kullanacağız; yöntemi aslında nerede olduğunu bilmek gerek.
  • Kullanımı parent:: statik bir çağrı gibi görünüyor olsa bile, gayet iyi çalışıyor


And here's an example of code showing parent:: works fine :

class Father {
    public function method() {
        var_dump($this->a);
    }
}

class Son extends Father {
    protected $a;
    public function method() {
        $this->a = 10;
        parent::method();
    }
}

$obj = new Son();
$obj->method();


You'll get this output :

$ /usr/local/php-5.3/bin/php temp.php
int(10)

Hangi ana sınıfta, metot $this erişimi ve alt sınıfında tanımlanan özelliklere sahip olduğunu göstermektedir.

Peki, parent aslında statik ana sınıfına başvuran - orada olduğunu varsaymak için hiçbir neden yoktur bir $parent sadece bir $child, ve bile orada var çünkü örneği yok $child $parent erişim olmazdı edildi.

Son olarak, her zamanki class dog extends animal OOP açıklamalar çalışmaz bir örneği! :)

Kullanarak $parent aslında üst sınıf örneği olduğunu varsayar çünkü.

Lütfen sözdizimi çalıştı öneririz, bu size 2 veya daha fazla nesneleri başlatmasını edildi, bir nesne örneği her şey anlamına gelecektir.

PHP, her değişken bir dize, tamsayı (ya da diğer sayısal biçim), dizi, nesne veya kaynak içermelidir. $this bir nesne içerir ve sadece içinizde şu anda nesne olur.

$parent oluşturmak için, $parent içine bir nesne koymak zorunda kalacaktı. Sen üst sınıf teknik örneği değil, bu nedenle bir değişkene atanamaz.

BTW parent::function(); $this tüm erişimi vardır.

Dolayısıyla, bu işleri

class Test
{
    public function test()
    {
        echo $this->testing_var;
    }
}

class OtherTest
{
    public function run()
    {
        $this->testing_var = "hi";
        Test::test(); // echos hi
    }
}

Ve bu sınıfın dışında kullanıldığı takdirde hata olacak ve statik ilan edilmelidir söyleyecektir.

Test::test();