2014-06-09 107 views
2

我有一些僞PHPDoc的動態命名空間繼承

<?php 
namespace Parent { 

    class Helper{ 
     public $a; 
    } 

    class Test{ 
     /** 
     * @var Helper 
     */ 
     public $helper; 

     public function __construct() { 
      $reflection = new \ReflectionClass($this); 
      $name = $reflection->getNamespaceName() . "\Helper"; 
      $this->helper = new $name; 
     } 
    } 

} 

namespace Child { 

    class Helper{ 
     public $b; 
    } 

    class Test extends \Parent\Test {} 
} 

在這種PHPDoc的財產\兒童\測試 - >助手必須鏈接到\父母\助手。

對於PHPStorm和phpDocumentor @var Helper等於@var \Parent\Helper。當試圖讓$this->helper自動完成\Child\Test我只能從\Parent\Helper

如何重寫我的phpdoc塊?

回答

0

重寫屬性在子類中把完全合格的命名空間有:

class Test extends \Parent\Test 
{ 
    /** 
    * @var \Child\Helper 
    */ 
    protected $helper; 

注意,酒店需要在父被保護(或公共)。

另一種替代方案是使用Helper接口,然後改變屬性上的DocBlock以表示接口,例如,

@var HelperInterface 

這是假設你的助手共享相同的API,但是。

另見docs for PHPDocumentor explaning how to annotate types.

+0

對於PHPStorm和phpDocumentor的'@var Helper'等於'@var \父母\ Helper'。當試圖在'\ Child \ Test'裏爲'$ this-> helper'自動完成時,我只從'\ Parent \ Helper'獲得方法 – Hello

+1

@Hello然後覆蓋子類中的屬性 – Gordon