2012-03-11 26 views
8

Tôi có đoạn mã sau:Auto hoàn chỉnh cho một biến bên trong một 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 
     } 
    } 
} 

Vấn đề là dễ dàng. Tôi chỉ muốn có thể tuyên bố loại cho biến của tôi $supplier như cách tôi đã thực hiện với $suppliers.

Ghi chú:

  • Nhà cung cấp là một lớp trong đó có một phương pháp getSupplierName công cộng().
  • Tôi đang sử dụng Netbeans IDE.
+0

Nếu '$ suppliers' của bạn là một mảng của' Supplier', sau đó chú thích PHPDoc của bạn là sai. Trong các IDE khác, bạn có thể chú thích một mảng như '@var Supplier []', bạn đã thử nó chưa? – DCoder

+0

@DCoder yes '$ suppliers' là một mảng' Supplier' và tôi đã thử '@var Supplier []', nhưng nó không hoạt động. Trên thực tế thay đổi nó thành '@var Supplier []' không đưa ra gợi ý nào cho '$ this-> suppliers->' – Songo

+0

Vâng, nếu nó là một mảng, nó không thực sự có bất kỳ phương thức nào, phải không? – DCoder

Trả lời

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

Tại sao không chỉ 'foreach ($ this-> nhà cung cấp là/* @var Nhà cung cấp */$ nhà cung cấp)' – srcspider

+1

Bạn có thể xác định vars là mảng trong netbeans:/** @var Supplier [] * / – clauziere

2

thử này nếu $ this-> nhà cung cấp là một mảng:

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

Trong giải pháp của bạn, tôi vẫn đang truy cập vào '$ this-> suppliers' để lấy các phương thức. Những gì tôi đang cố gắng là truy cập vào phương thức '$ supplier'. – Songo

+0

giống nhau. Nếu bạn lặp qua một mảng các phần tử, bạn có thể truy cập các phương thức của một phần tử theo một trong hai cách. Có thể, bạn có thể cung cấp cho chúng tôi ví dụ hoạt động không hoạt động theo cách bạn muốn. – lukassteiner

4

này nên làm việc:

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

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

Bạn có thể đạt được điều này (trong netbeans) bằng cách làm như như sau:

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

Đối với tôi đây không làm việc:

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

giải pháp của tôi:

foreach ($suppliers as $supplier) { 
    if($suppliers instancof Supplier) { 
     $supplier-> 
    } 
} 
Các vấn đề liên quan