Sınıfım içine PHP İthalat Dış Sınıf 'Yöntemi

3 Cevap php

Bu PHP Lve mümkün olup olmadığını merak:

En aşağıdaki gibi bir sınıf var diyelim:

class myClass{
  var $myVar;
    ...
  myMethod(){
      $this->myVar = 10;
  }
}

ve başka bir sınıf:

class anotherClass {
   ...
   addFive(){
       $this->myVar += 5;
   }
}

'AnotherClass' 3500 satır uzunluğundadır ve ben sadece tek 'addFive' yöntemi myClass kullanmak istiyorum.

  • Ben işlevini ithalat ve benim sınıfta aramak mümkün olacak ve $ this myClass nesnesine başvurur bir yolu var mı?
  • Bu iyi / kötü bir uygulama mı?
  • (Isteğe bağlı) Nasıl Python bu iş yapar? (Python öğrenmeye başlıyorum gibi sadece merak)

3 Cevap

Bunu yapmanın en kolay yolu, bir sınıfın diğer uzatmak sahip olduğunu

class myClass extends anotherClass {
}

MyClass sınıfı şimdi ortak veya korumalı olan anotherClass tüm yöntemlerine erişime sahiptir.

Yalnızca sınıf diğer one yöntemi var, ya da bunu sağlayacak PHP yerleşik bir şey yok, bir sınıf, diğer uzanır olması pratik değil istiyorum. Sizin için Google'a aradığınız kavramı başka bir sınıfın işlevsellik Mix gibi, "mixin" dir. Kendimi orada bir article or two, bazı kalıpları üzerinde PHP bu işlevselliği elde etmek için deneyebilirsiniz, ama ben hiç denemedim.

İyi fikir / kötü bir fikir? Aşağı tekniği var bir kez rahat ve kullanışlı, ancak performans size maliyeti ve zor bir başlayanlar sizin kodu ile yapıyoruz kaale için yapar, özellikle (fakat bunlarla sınırlı değildir) OO kavramları ile daha az aşina birisi.

Daha iyi bir yaklaşım, kendi sınıfının içine karmaşık bir yöntem taşımak olacaktır. Sonra sınıfların hem örnekleriz gerekli veri aktarmak ve yöntemini çağırabilirsiniz.

Lütfen myClass extends anotherClass o (özel işaretli olanlar hariç) tüm yöntemleri ve anotherClass özelliklerini devralır eğer.

class AnotherClass {
  protected $myVar;
  public function addFive(){
    $this->myVar += 5;
  }
}

class MyClass extends AnotherClass {
  public function __construct() {
    $this->myVar = 0;
  }

  public function myMethod(){
    $this->myVar = 10;
  }
}

$m = new MyClass;
$m->myMethod();
$m->addFive();
var_dump($m);

baskılar

object(MyClass)#1 (1) {
  ["myVar":protected]=>
  int(15)
}