2016-08-08 25 views
7

Bir Product Sınıfına sahip olduğumu varsayalım, PHP'ye yalnızca Product dizisini kabul etmek istediğimi nasıl söyleyebilirim? 'PHP - Yalnızca belirli bir sınıf dizisini kabul edin

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

    // ... 
} 

İşe yarayabilir, ama don: Başka bir deyişle

, böyle bir şey yapmayı düşündün

Bu yöntemde ?: böyle bir şey yapmak için bir yol var mı Sadece bir "Product[]" olduğundan emin olmak için bir grup çizgi eklemekten hoşlanır.

+0

Yazılı diziler olmadığından, buna benzer bir şey yoktur. İlk önce bir ürün listesi için kendi sınıfınızı oluşturursanız bunu uygulayabilirsiniz. Daha sonra bu sınıf, tip ipucu parametresinde kullanılabilir ve bu sınıfın kendi iç dizisine sadece ürünlerin eklenmesini sağlaması gerekir. – CBroe

cevap

5

Yalnızca konteyner ne olursa olsun ipucu yazabilirsiniz. Yani sadece belirli bir tip ipucu argümanı kendisi doğrulayabilir

private function method(Array $products) 

PHP yapmak zorunda kalacak ve bir şey argüman içerebilir değil. Dediğin gibi

diziyi doğrulamak için en iyi yolu bir döngü olduğunu, ama burada faydası, bir işlev çağrısı

başka bir fikir yükünden kaçınmak olduğunu

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

konusunda ufak bir değişiklik yapar bir sarıcı sınıfı

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

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

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

Bu yol açmak olacaktır, sizin sarıcı Product

01 örnekleri dışında bir şey içeremez
+0

Cevabınız için teşekkür ederiz. PHP'den böyle bir şeyi hayata geçirmeyi umuyordum: \ Daha iyi bir cevap olmayacaksa, bunu cevap olarak işaretleyeceğim. Tekrar, teşekkür ederim :) –

+0

@EliyaCohen Bir daha düşündüm. Düzenlememi kontrol et – Machavity

+0

Eh, sanırım başka yolu yok. Harika fikir .. –