10

配列内にカスタムオブジェクト(ポッドキャスト)のコレクションがあります。

foreachループを使用してこのコレクションを反復処理する場合、コレクションから引き出されたオブジェクトを含む変数のコード補完がありません(たとえば、C#/ VisualStudioの場合のように)。

PHPにタイプヒントを与えて、Eclipseがコレクションからプルされているオブジェクトのタイプを認識し、そのオブジェクトのメソッドをインテリセンスで表示できるようにする方法はありますか?

代替テキスト

<?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;
    }

}

?>

補遺

ありがとう、ファニス、FOREACHテンプレートを更新して、その行を自動的に含めました。

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

    }
}

代替テキスト

4

2 に答える 2

19

はい、試してください:

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

Eclipseを使用してからしばらく経ちましたが、以前はEclipseでも機能していたことを思い出します。

于 2010-09-18T15:49:12.423 に答える
0

これは、この問題に対するより簡潔な解決策を探しているインターネットの他の人々を助けるかもしれません。

私のソリューションにはPHP7以降が必要です。アイデアは、無名関数を使用して配列をマップし、型ヒントを利用することです。

  $podcasts = getPodcasts();
  $listItems = array_map(function (Podcast $podcast) {
      return "<li>" . $podcast->getTitle() . "</li>";
  }, $podcasts);
  $podcastsHtml = "<ul>\n" . implode("\n", $listItems) . "\n</ul>";

ほとんどの場合、aforeachはに変換できますが、関数型プログラミングarray_mapへのパラダイムシフトが少し必要です。

Laravelを使用している場合(他のフレームワークにもコレクションがあると確信しています)、これらの配列マップを配列フィルターや次のような他の機能的なものでチェーンすることもできます。

$html = "<ul>" . collect($podcasts)
  ->filter(function (Podcast $p) { return $p !== null; }) // filtering example
  ->map(function (Podcast $p) { return "<li>".$p->getTitle()."</li>"; }) // mapping
  ->implode("\n") . "</ul>";

プレーンなphpチェーンでは、これらの配列関数はかなり見苦しく見えます...

しかし、そこに行きます!配列の反復を示唆する型のネイティブな方法。

于 2018-08-07T22:16:24.083 に答える