php ile sınıf başlatma

4 Cevap php

Ben sadece yöntem gerekir ve yeni parametreler geçmek zorunda nesnesine bir başvuru sahip endişe değilim, başka bir sınıfını başlatır bir sınıf var.

class A {
     __set .....
}

class B extends A {
     $anotherA = new A;
     $anotherA->myName = 'stackoverflow';
}

Kısacası ben B sınıfı A, A yeni bir örneğini init ama "yeni" everytime yazmak zorunda istemiyorum uzatmak olmasını istiyorum, ben aşağıdaki sözdizimini gördüm:

B::A // something like that

ama emin değilim ben yapmaya çalışıyorum ne yapardın eğer o ya da nasıl kullanılacağını olur?

4 Cevap

Ben o zaman sadece bir kısayol gibi davranır onun kurucu veya statik B::create(), birini kullanarak B örneğini, B yapıcısında A örneğini yaratacak. Tüm örnekleme create() üzerinden gitmek istedim eğer yapıcı özel yapabilir.

class A {
    // __set .....
}

class B extends A {
     public function __construct() {
         parent::__construct();
         $anotherA = new A;
         $anotherA->myName = 'stackoverflow';
     }

     public static function create() {
         return new self();
     }
}


new B();
B::create();

Neler yapabileceğini yeni bir örneğini döndürür sınıf statik bir yöntem tanımlamaktır. Bu temelde bir 'kısayol', ama arka planda tam olarak aynı işi yapar.

class C {
   public static function instance()
   {
      return new C();
   }

   public function instanceMethod()
   {
      echo 'Hello World!';
   }
}

Şimdi böyle arayabilirsiniz:

C::instance()->instanceMethod();

Burada statik fonksiyonların bazı örnekler vardır - onlar 'yeni A' veya 'yeni B' kullanmadan çağrılabilir.

class A {
    static function message($msg = 'I am Alpha') {
        echo "hi there, $msg\n";
    }
}

class B {
    static function message() {
        A::message("I am Beta");
    }
}

A::message();
B::message();

Eğer B A uzanan olduğundan, A sınıfı yöntemi diyebiliriz:

class B extends A {
    public function someMethod() {
        parent::someMethodName();
    }
}

Alternatif olarak, sınıfın statik bir yöntemi oluşturabilirsiniz:

class A {
    public static function someStaticMethod() { ... }
}

A::someStaticMethod();

Eğer gerçekten istiyorsanız a new instance of A, sen have to new operatörünü kullanın. İşte bunun için budur.