2016-08-08 8 views
7

स्वीकार करें मान लें कि मेरे पास Product कक्षा है, मैं PHP कैसे बता सकता हूं कि मैं Product के केवल ऐरे को स्वीकार करना चाहता हूं?PHP - केवल विशिष्ट वर्ग

दूसरे शब्दों में, वहाँ इस विधि ?:

मैं कुछ इस तरह कर रही है के बारे में सोचा की तरह कुछ करने के लिए एक रास्ता है:

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

    // ... 
} 

यह काम कर सकता था, लेकिन मैं डॉन ' यह सुनिश्चित करने के लिए कि यह एक "Product[]" है, लाइनों का एक गुच्छा जोड़ने के इस विचार की तरह।

+0

चूंकि कोई टाइप किए गए सरणी नहीं हैं, इसलिए ऐसा कुछ भी नहीं है। यदि आप पहले उत्पादों की सूची के लिए अपनी खुद की कक्षा बनाते हैं तो आप शायद इसे लागू कर सकते हैं। तब उस वर्ग का उपयोग संकेत संकेत पैरामीटर में किया जा सकता है, और उस वर्ग को स्वयं यह सुनिश्चित करना होगा कि केवल उत्पादों को अपने आंतरिक डेटा सरणी में जोड़ा जा सके। – CBroe

उत्तर

5

आप केवल कंटेनर जो भी संकेत दे सकते हैं। तो तुम

private function method(Array $products) 

पीएचपी करने के लिए केवल एक दिया प्रकार संकेत में तर्क ही मान्य कर सकते हैं के लिए होता है, और कुछ भी नहीं तर्क हो सकता है।

सरणी मान्य करने के लिए सबसे अच्छा तरीका है एक पाश के रूप में आप ने कहा है, लेकिन मैं एक मामूली बदलाव

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

लाभ यहाँ आप एक समारोह कॉल

एक और विचार की भूमि के ऊपर से बचने के है बनाना होगा एक आवरण वर्ग

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

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

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

इस तरह बनाने के लिए हो सकता है, अपने आवरण Product

01 के उदाहरणों के अलावा कुछ नहीं हो सकते
+0

आपके उत्तर के लिए धन्यवाद। मैं थोड़ी उम्मीद कर रहा था कि PHP से कुछ इस तरह कार्यान्वित करें: \ अगर कोई बेहतर जवाब नहीं होगा, तो मैं इसे उत्तर के रूप में चिह्नित करूंगा। दोबारा, धन्यवाद :) –

+0

@EliyaCohen मेरे पास एक और विचार था। मेरा संपादन – Machavity

+0

देखें, ठीक है, मुझे लगता है कि कोई दूसरा रास्ता नहीं है। महान विचार था .. –

संबंधित मुद्दे