2016-08-08 19 views
7

Załóżmy, że mam klasę Product, Jak mogę powiedzieć PHP, że chcę zaakceptować tylko tablicę Product?PHP - akceptuj tylko tablicę określonej klasy

Innymi słowy, czy istnieje sposób, aby zrobić coś w tej metodzie ?:

myślałem o zrobieniu czegoś takiego:

private function validate($products) 
{ 
    foreach ($products as $product) 
     if (!is_a($product, 'Product') 
      return false; 

    // ... 
} 

To może działać, ale I don” W ten sposób dodasz kilka linii, aby upewnić się, że jest to "Product[]".

+0

Ponieważ nie ma tablic typograficznych, również nie ma czegoś takiego. Możesz go zaimplementować, jeśli najpierw stworzysz własną klasę dla listy produktów. Wówczas klasa ta mogłaby zostać użyta w parametrze podpowiedzi typu, a sama klasa musiałaby zapewnić, że do wewnętrznej tablicy danych można dodać tylko produkty. – CBroe

Odpowiedz

5

Możesz tylko wpisać wskazówkę, niezależnie od kontenera. Więc trzeba by zrobić

private function method(Array $products) 

PHP może zatwierdzić tylko samego argumentu w danym nutą typ, a nie coś argument może zawierać.

Najlepszym sposobem, aby potwierdzić tablicy jest pętla jak pan powiedział, ale chciałbym zrobić niewielka zmiana

private function validate(Array $products) 
{ 
    foreach($products as $product) 
     if (!($product instanceof Product)) 
      return false; 
} 

tu zaletą jest uniknąć napowietrznej wywołania funkcji

Innym pomysłem byłoby uczynić klasy otoki

class Product_Wrapper { 
    /** @var array */ 
    protected $products = array(); 

    public function addProduct(Product $product) { 
     $this->products[] = $product; 
    } 

    public function getProducts() { 
     return $this->products; 
    } 
} 

ten sposób swoją wrapper nie może zawierać niczego z wyjątkiem przypadków Product

+0

Dziękuję za odpowiedź. Miałem nadzieję, że od PHP zaimplementuję coś takiego: \ Jeśli nie będzie lepszej odpowiedzi, zaznaczę to jako odpowiedź. Jeszcze raz dziękuję :) –

+0

@EliyaCohen Miałem jeszcze jedną myśl. Sprawdź moją edycję – Machavity

+0

Cóż, myślę, że nie ma innej drogi. Świetny pomysł ... –

Powiązane problemy