2014-02-06 130 views
1

我寫了一個框架,我有,我的MySQL類加載到一個數組一部分像這樣的:Netbeans的動態屬性自動完成

protected $db = array(); 
.... 
public function __construct(){ 
    $this->db = (object)$this->db; 
} 
.... 
private function setupDatabases(){ 
    if(isset($this->config["databases"])){ 
     foreach($this->config["databases"] as $name => $data){ 
      $this->db->$name = $this->mysql->init($this->config); 
      $this->db->$name->setConnectionParams($data); 
     } 
    } 
} 

我想一些PHPDoc的添加代碼,以便自動-complete會提示該類中的方法列表:$this->db->localhost->

我已經嘗試過可能會做不同的方法,但它們不起作用。是否有某種phpDoc標記,我可以做到這一點?這甚至有可能嗎?

+0

我問[類似的問題(http://stackoverflow.com/questions/23267706/phpdoc-and-code-completion-via-t-object-operator-in-netbeans-8-0)有可能我只相信它不能完全動態......如果你檢查/測試示例源代碼,你將有一個可行的解決方案。 – CrandellWS

+0

我會加我的問題作爲你的回答... – CrandellWS

回答

0

我認爲你需要將該$ db屬性本身包裝到一個類中。這樣,$ db-> localhost就成爲一個類屬性,您可以通過VAR標籤(@var MyDbClass)給出數據類型。

+0

你有沒有一個例子? –

+0

那麼,一個例子會變得很大;-)爲了有任何自動完成的能力,東西的內部元素將不得不被記錄。您的示例似乎依賴於將數組轉換爲stdClass對象。我的建議是用您編寫的MyDbClass替換該stdClass。在MyDbClass裏面,你明確地定義它的類屬性,比如$ name和$ localhost,並給每個屬性一個'@ var'標籤來表示它的數據類型。正是這個'@ var'使得自動填充成爲可能。 – ashnazg

0

看來你必須在父類中設置變量來獲得代碼完成傳遞。如果這可以在不預設變量的情況下完成,請回答this question

<?php 
/** 
* This is a parent class. 
* 
* @package Examples/doubledVars 
*/ 
class parentExample 
{ 
    public $cc; 
    // notice^ <------------------------------------------------------SEE ME 

    /** 
    * A basic contructor 
    */ 
    public function __construct() 
    { 
     echo '::PE Class initiated::'; 
     $this -> c = 'we are value "c" in the parent class'; 
    } 
} 


/** 
* This is an Example of no doubling occuring due to __construct() 
* @see noDouble 
* 
* @package Examples/codeCompletion 
*/ 
class codeCompletion extends parentExample 
{ 
    /** 
    * @see noDouble::__construct() 
    */ 
    public function __construct() 
    { 
     //empty constructor prevents doubling 
    } 


    public function getC() 
    { 
     return $this -> c; 
    } 
} 



$parentExampleCC = new parentExample; 

$parentExampleCC->cc = new codeCompletion; 

echo $parentExampleCC->cc->getC();//CC working <------------SEE ME