Başka bir sınıf içinde PHP erişim sınıfı

3 Cevap php

Yani böyle iki sınıf vardır:

class foo {
    /* code here */
}
$foo = new foo();
class bar {
    global $foo;
    public function bar () {
        echo $foo->something();
    }
}

Ben bu gibi bar içinde her yönteminde ilan etmeden, tüm yöntemler çubuğunun içindeki foo yöntemleri erişmek istiyorsanız:

class bar {
    public function bar () {
        global $foo;
        echo $foo->something();
    }
    public function barMethod () {
        global $foo;
        echo $foo->somethingElse();
    }
    /* etc */
}

Ben de, bunu uzatmak istemiyorum. Ben var anahtar sözcüğünü kullanarak çalıştı, ancak çalışmak için görünmüyordu. Ben barın tüm yöntemleri içinde diğer sınıf "foo" erişmek için ne yapmalıyım?

3 Cevap

Siz de böyle yapabilirsiniz:

class bar {
    private $foo = null;

    function __construct($foo_instance) {
      $this->foo = $foo_instance;
    }

    public function bar () {
        echo $this->foo->something();
    }
    public function barMethod () {
        echo $this->foo->somethingElse();
    }
    /* etc */
}

Daha sonra bunu yapabilirsiniz:

$foo = new foo();
$bar = new bar($foo);

O bar bir üyesi olun. Küresellerle kullanmak asla çalışın.

class bar {
    private $foo;

    public function __construct($foo) { $this->foo = $foo; }

    public function barMethod() {
        echo $this->foo->something();
    }
}

Kısa cevap: hayır, ne istediğinizi uygulamak için hiçbir yolu yoktur.

Başka bir kısa cevap: Eğer "yanlış" bir şekilde sınıfları ile çalışıyoruz. Object Oriented paradigma seçildikten sonra - "küresel" bir anahtar kelime unutun.

Ne istediğinizi yapmanın doğru yolu bar üyesi olarak foo bir örneğini oluşturmak ve bu yöntemler bulunuyor kullanmaktır. Bu adlandırılır delegation.