【问题标题】:Netbeans Dynamic Property Auto-CompleteNetbeans 动态属性自动完成
【发布时间】:2014-03-04 04:55:15
【问题描述】:

我正在编写一个框架,我有一部分将 MySQL 类加载到这样的数组中:

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,以便自动完成功能会建议类中的方法列表:$this->db->localhost->

我尝试了不同的方法来做到这一点,但它们不起作用。是否有某种 phpDoc 标记我可以做到这一点?这甚至可能吗?

【问题讨论】:

  • 我问了一个similar question 我可能只是相信它不可能是完全动态的...如果您检查/测试示例源,您将有一个可行的解决方案。
  • 我会添加我的问题作为你的答案...

标签: php netbeans netbeans-7 phpdoc


【解决方案1】:

我认为您需要将该 $db 属性本身包装到一个类中。这样,$db->localhost 就成为一个类属性,您可以通过 VAR 标记 (@var MyDbClass) 为其赋予数据类型。

【讨论】:

  • 你有例子吗?
  • 好吧,一个例子会变得很大;-) 为了有任何自动完成能力,必须记录一些东西的内部元素。您的示例似乎依赖于将数组转换为 stdClass 对象。我的建议是用您编写的 MyDbClass 替换那个 stdClass。在 MyDbClass 中,您可以明确定义其类属性,如 $name 和 $localhost,并为每个属性指定一个 @var 标记来表示其数据类型。正是这个@var 使自动完成成为可能。
【解决方案2】:

看来您必须在父类中设置变量才能让代码完成传递。如果不用预设变量也能做到,请回复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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-14
    • 1970-01-01
    • 2019-12-13
    • 1970-01-01
    • 2012-06-06
    • 1970-01-01
    • 1970-01-01
    • 2011-01-01
    相关资源
    最近更新 更多