2010-09-18 4 views
9

Tengo una colección de objetos personalizados (Podcast) en una matriz.¿Cómo puedo obtener intellisense en PHP/Eclipse en objetos personalizados sacados de la matriz en el bucle foreach?

Cuando uso una foreach bucle para iterar a través de esta colección, no tengo código de finalización sobre la variable que contiene el objeto sacado de la colección (como lo haría en C#/VisualStudio por ejemplo) .

¿Hay alguna manera de darle a PHP una sugerencia de tipo para que Eclipse sepa el tipo de objeto que se está extrayendo de la colección para que pueda mostrarme los métodos de ese objeto en intellisense?

alt text

<?php 

$podcasts = new Podcasts(); 
echo $podcasts->getListHtml(); 

class Podcasts { 
    private $collection = array(); 

    function __construct() { 
     $this->collection[] = new Podcast('This is the first one'); 
     $this->collection[] = new Podcast('This is the second one'); 
     $this->collection[] = new Podcast('This is the third one'); 
    } 

    public function getListHtml() { 
     $r = ''; 
     if(count($this->collection) > 0) { 
      $r .= '<ul>'; 
      foreach($this->collection as $podcast) { 
       $r .= '<li>' . $podcast->getTitle() . '</li>'; 
      } 
      $r .= '</ul>'; 
     }  
     return $r; 
    } 
} 

class Podcast { 

    private $title; 

    public function getTitle() { return $this->title; } 
    public function setTitle($value) { $this->title = $value;} 

    function __construct($title) { 
     $this->title = $title; 
    } 

} 

?> 

Adición

Gracias, Fanis, he actualizado mi plantilla FOREACH para incluir esa línea de forma automática:

if(count(${lines}) > 0) { 
    foreach(${lines} as ${line}) { 
     /* @var $$${var} ${Type} */ 

    } 
} 

alt text

+0

Buenas cosas :) Buen uso de plantillas también. – Fanis

Respuesta

18

Sí, Proveedores:

foreach($this->collection as $podcast) { 
    /* @var $podcast Podcast */ 
    $r .= '<li>' . $podcast->getTitle() . '</ 
} 

Ha pasado un tiempo desde que utilicé Eclipse pero recuerdo que solía funcionar allí también.

+1

que es tan brillante, gracias! –

+0

¡De nada! Solo fyi, algunos IDEs pueden requerir un docblock adecuado, es decir, dos asteriscos: '/ ** @var ... * /' – Fanis

Cuestiones relacionadas