2012-03-11 26 views
8

मैं निम्नलिखित कोड है अंदर एक चर के लिए स्वत: पूर्ण:एक foreach

class Orders{ 
    /** 
    * 
    * @var Supplier 
    */ 
    private $suppliers; //Array of Supplier 

    function loopAllSuppliers(){ 
     foreach($this->suppliers as $supplier){ 
      $supplier->/*no suggestion*/ //Can't get the method's to show here 

      $this->suppliers->getSupplierName(); //methods in class Supplier show normally here 
     } 
    } 
} 

समस्या आसान है। मैं बस अपने चर $supplier के लिए एक प्रकार घोषित करने में सक्षम होना चाहता हूं जैसे मैंने इसे $suppliers के साथ कैसे किया।

नोट्स:

  • प्रदायक एक वर्ग है जो एक सार्वजनिक विधि getSupplierName है()।
  • मैं नेटबीन्स आईडीई का उपयोग कर रहा हूं।
+0

अपने '$ suppliers' की' Supplier', तो अपने phpdoc एनोटेशन गलत है एक सरणी है। अन्य आईडीई में आप इस तरह के सरणी को '@var प्रदायक []' के रूप में एनोटेट कर सकते हैं, क्या आपने कोशिश की है? – DCoder

+0

@DCoder yes '$ आपूर्तिकर्ता '' प्रदायक' की एक सरणी है और मैंने '@var प्रदायक []' की कोशिश की, लेकिन यह काम नहीं करता है। वास्तव में इसे '@var प्रदायक []' में बदलकर '$ this-> आपूर्तिकर्ताओं->' – Songo

+0

के लिए कोई सुझाव नहीं दिखाई दिए, ठीक है, अगर यह एक सरणी है, तो वास्तव में इसमें कोई विधि नहीं है, है ना? – DCoder

उत्तर

13
class Orders{ 
    /** 
    * 
    * @var Supplier 
    */ 
    private $suppliers; 

    function loopAllSuppliers(){ 
     foreach($this->suppliers as $supplier){ /* @var $supplier Supplier */ 
     //Must declare the type again inside the foreach as Netbeans doesn't support 
     // defining variable as arrays in doc blocks, yet. 
     } 
    } 
} 
+2

क्यों न केवल 'foreach ($ this-> आपूर्तिकर्ताओं के रूप में/* @var प्रदायक */$ आपूर्तिकर्ता) ' – srcspider

+1

आप netbeans में सरणी के रूप में वर्रों को परिभाषित नहीं कर सकते:/** @var प्रदायक [] * / – clauziere

2

कोशिश इस करता है, तो $ this-> आपूर्तिकर्ताओं एक सरणी है:

function loopAllSuppliers(){ 
    foreach($this->suppliers as $key => $supplier){ 
     $supplier->/*no suggestion*/ //Can't get the method's to show here 

     $this->suppliers[$key]->getSupplierName(); //should work 

     $this->suppliers->getSupplierName(); //methods in class Supplier show normally here 
    } 
} 
+0

आपके समाधान में मैं अभी भी विधियों को प्राप्त करने के लिए '$ this-> आपूर्तिकर्ताओं' तक पहुंच रहा हूं। मैं जो कोशिश कर रहा हूं वह '$ सप्लायर 'के तरीकों तक पहुंच बनाना है। – Songo

+0

जो वही है। यदि आप तत्वों की एक सरणी के माध्यम से लूप करते हैं, तो आप किसी भी तरीके से किसी तत्व के तरीकों तक पहुंच सकते हैं। हो सकता है कि आप हमें एक ऐसा कामकाजी उदाहरण प्रदान कर सकें जो आपके इच्छित तरीके से व्यवहार न करे। – lukassteiner

4

यह काम करना चाहिए:

class Orders 
{ 
    /** 
    * @var Supplier[] 
    */ 
    private $suppliers; 

    public function loopAllSuppliers() 
    { 
     foreach($this->suppliers as $supplier) { 
     } 
    } 
} 
0

आप (NetBeans में) इस लक्ष्य को हासिल कर सकते हैं करने से निम्नलिखित:

foreach ($suppliers as /* @var $supplier Supplier */ $supplier) { 
     $supplier->/*should have suggestions*/ 
    } 
2

मेरे लिए यह काम नहीं:

foreach ($suppliers as /* @var $supplier Supplier */ $supplier) { 
    $supplier->/*should have suggestions*/ 
} 

मेरी समाधान:

foreach ($suppliers as $supplier) { 
    if($suppliers instancof Supplier) { 
     $supplier-> 
    } 
}