2014-02-06 127 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