PHP Sınıflar: ebeveyn / çocuk iletişimi

4 Cevap php

I'm having some trouble extending Classes in PHP. Have been Googling for a while.

 $a = new A();
 $a->one();

 $a->two();
 // something like this, or...

 class A {
  public $test1;

   public function one() {
    echo "this is A-one";

    $this->two();
    $parent->two();
    $parent->B->two();
    // ...how do i do something like this (prepare it for using in instance $a)?

   }
 }

 class B extends A {
   public $test2;

    public function two($test) {
     echo "this is B-two";

    }
 }

Ben usul PHP de iyiyim.

4 Cevap

Sizin örnekler gayet iyi, ama burada biraz karışıklık gösteriyor:

public function one() {
    echo "this is A-one";

    $this->two();
    $parent->two();
    $parent->B->two();
}

ne istiyorsun bence şudur:

class A
{
    function one()
    {
        echo "A is running one\n";
        $this->two();
    }
    function two()
    {
        echo "A is running two\n";
    }

}

class B extends A
{
    function two()
    {
        echo "B is running two\n";
    }
}

Sonra B tipi bir nesne yapmak ve "bir" fonksiyonu çağırmak istiyorum

$myB = new B();
$b->one();

Bu irade çıktı

A is running one
B is running two

Bu polimorfik sınıf davranış bir örnektir. Superclass fonksiyonu "iki" geçerli örneğinin versiyonunu aramak bilecek. Bu PHP standart bir özellik olan ve çoğu nesne yönelimli dilleri.

Bir üst sınıf alt sınıflara bilir asla unutmayın, işlevi "iki" ebeveyn (A) sınıfı tanımlandı, çünkü "iki" yöntemini çağırın ve B versiyonu çalıştırmak olabilir tek nedeni budur.

Bu yapılamaz. Öncelikle, sınıf A böylece ebeveyn ile bir şey kullanarak doğru liste dışı, sınıf B'nin üstüdür.

Bir üst sınıf için gitmez bir çocuk sınıf için geçerli şeyler bir dizi var:

  • Sınıf B A çalışmak için mevcut olması gerekir
  • B Sınıfı Bir can artı daha her şeyi yapabilirsiniz
  • B Sınıfı (kadar onu erişmesine izin gibi) A sınıfı tüm verilerinizi erişimi vardır

Bunlardan hiçbiri ters doğrudur, bu yüzden birlikte size bir çocuğun işlev çağrısı olamaz nedenini oluşturuyor.

Object Inheritance section PHP kılavuzun yakın bir okuma var. Evet, orada bir çok bilgiyi http://us2.php.net/oop öyle, ama sen OOP çıkmak yapabileceğini düşünmek yardımcı olabilir.

burada can ne var:

class A{
  public function methodOfA (){
    echo "this is a method of A (and therefore also of B)";
  }
}

class B extends A{
  public function methodOfB (){
    echo "this is a method of B";
    // you can do {$this->methodOfA ()} if you want because all of A is inherited by B
  }
}

$a = new A ();  // $a is an A
$a->methodOfA ();     // this is OK because $a is an A
// can't do {$a->methodOfB ()} because $a is not a B

$b = new B ();  // $b is a B, and it is also an A, because B extends A
$b->methodOfB (); // ok because $b is a B
$b->methodOfA (); // ok becuase $b is an A

Tabii ki, çok daha fazlası var. (Artlung yanıtında) php kılavuzda iyi OOP bölüm var.