php şablon sınıfları nasıl taklit

3 Cevap php

PHP C + + şablon sınıfları taklit etmek nasıl?

EDITED1

Örneğin, bu nasıl PHP olurdu?

template  <typename T>
class MyQueue
{
         std::vector<T> data;
      public:
         void Add(T const &d);
         void Remove();
         void Print();
};

3 Cevap

PHP için C + + kod dönüştürme:

class MyQueue{
  private $data;
  public function Add($d);
  public function Remove();
  public function Print();
};

Thirler açıklandığı gibi Ekle işlevi istediğiniz şey geçmek, ve $ verileri istediğiniz değeri ne olursa olsun tutmak, böylece PHP, dinamiktir. Gerçekten bazı tür güvenliğini eklemek istedim, sen kurucusuna izin vermek istediğiniz türü geçmek zorunda olacaktır.

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

Sonra instanceof operatörü kullanan diğer işlevlerinde bazı kontrolleri ekleyebilirsiniz.

public function Add($d){
    if ( !($d instanceof $this->type ){
        throw new TypeException("The value passed to the function was not a {$this->type}");
    }
    //rest of the code here
}

Ancak, derleme zamanında tip hataları yakalamak için tasarlanmış bir statik yazdığınız languge işlevselliği yakın gelmeyecek.

PHP dynamicly yazılır. Ben sadece ek tip bilgi olarak bu durumda şablonları olması mantıklı / yararlı / mümkün olduğunu sanmıyorum.

Edit: As a reply to your example, in php you'd be responsible of knowing the type that is in the list. Everything is accepted by the list.

PHP bir değer olarak her tür ve bir anahtar olarak herhangi bir skaler kabul inanılmaz faydalı diziler.

Sizin örnekte en iyi çevirisi

class MyQueue {
  private $data = array();

  public function Add($item) {
    $this->data[] = $item; //adds item to end of array
  }

  public function Remove() {
    //removes first item in array and returns it, or null if array is empty
    return array_shift($this->data); 
  }

  public function Print() {
    foreach($this->data as $item) {
      echo "Item: ".$item."<br/>\n";
    }
  }

}