Genişletilmiş sınıfta bulunan sahte üst sınıfta set olan nesne niteliklerini - PHP çoklu kalıtım sahte

0 Cevap php

Can I extend a class using more than 1 class in PHP? verilen gibi çoklu miras Faking kullanmış

A aslında B sınıfı ve taklit genişleten sınıf sınıf C. uzanan için yapılır dikkat edin

Ben A sınıfı bir fonksiyonu içindeki C sınıfı bir fonksiyonu çağırmak bu kodu biraz düzenlenmiş versiyonunu düşünün A sınıfı kullanılabilir olması için C sınıfı bir fonksiyonu ayarlanmış bir nitelik ihtiyaç kadar gayet iyi çalışıyordu: -

//Class A
class A extends B
{
  private $c;

  public function __construct()
  {
    $this->c = new C;
  }

  // fake "extends C" using magic function
  public function __call($method, $args)
  {
    return call_user_func_array(array($this->c, $method), $args);
  }

//calling a function of class C from inside a function of class A
  public function method_from_a($s) {
     $this->method_from_c($s);
     echo $this->param; //Does not work
  }

//calling a function of class B from inside a function of class A
  public function another_method_from_a($s) {
     $this->method_from_b($s);
     echo $this->another_param; //Works
  }
}

//Class C

class C {
    public function method_from_c($s) {
        $this->param = "test";
    }
}

//Class B
class B {
    public function method_from_b($s) {
        $this->another_param = "test";
    }
}


$a = new A;
$a->method_from_a("def");
$a->another_method_from_a("def");

So, C sınıfı bir fonksiyonu ayarlanmış bir nitelik A sınıfı sonradan mevcut değildir ama B sınıfı ayarlarsanız, Ne adjustment Sahte üst sınıf iş nitelikleri ayarını yapmak için böylece eksik A sınıfı mevcuttur Gerçek gibi? Sahte ebeveynin işlevinde ayarlanır bir nitelik normal durumda gibi hiyerarşinin tüm sınıflarında mevcut olmalıdır.

Teşekkürler

Solved
I added the magic function __get() in class A and it worked.

public function __get($name)
{   
   return $this->c->$name;
}

0 Cevap