【问题标题】:Show class methods type-hinting显示类方法类型提示
【发布时间】:2014-08-15 16:13:18
【问题描述】:

我不知道如何准确地表达这个,但我需要的是一种加载类方法的类型提示的方法。基本上我有一个base 类,它有一个get 函数,看起来像这样:

class Base {

    /**
     * 
     * @param type $i
     * @return \i
     */
    public static function get($i) {
        // make sure it exists before creating
        $classes = get_declared_classes();
        if (!in_array($i, $classes)) {
            if (class_exists($i)) {
                return new $i();
            }
        }
        return $i;
    }
}

现在举个例子,假设我有一个名为 test 的类:

class test {
    function derp() {
        echo 'derp';
    }
}

我会通过以下方式实例化 test 对象:

$test = base::get('test');

现在我想做的就是像这样输入:

$test->

应该建议这些方法(目前只有derp()),我已经看过所有关于SO的文档,但它们不起作用:(

奇怪的是,如果我将 @return 评论更改为 test 类名,那么建议就会起作用。

但是如果类都没有设置,可能会实例化不同的类,因此我尝试了@returns \inetbeans 建议)。有什么方法可以实现吗?


编辑

我需要类型提示的原因是允许调用如下方法:

base::get('test')->derp();

【问题讨论】:

  • 我不只使用new?
  • @sectus 你是什么意思?
  • 我的意思是$test = new test;
  • @sectus 就是一个例子,我会用它来做类似base::get('test')->derp(); 的东西,但建议使用上述方法。
  • (new test)->derp();代替base::get('test')->derp();

标签: php netbeans type-hinting


【解决方案1】:

始终有效的是:

/** @var ADDTYPEHERE $test */
$test = base::get('test');

同样有效的是:

if ($test instanceof CLASS_IT_IS) {
  // completion works in here
}

您想要的解决方案永远无法工作,因为您的 IDE (netbeans) 无法知道您实例化了哪个类,没有任何上述提示。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-13
    • 2022-09-24
    • 2022-01-03
    • 2018-08-15
    • 2016-04-21
    • 2016-09-29
    • 2023-01-22
    • 1970-01-01
    相关资源
    最近更新 更多