我可以通过创建类冲突来扩展IDE建议吗?

时间:2017-03-23 09:15:30

标签: php phpstorm phpdoc

如果我使用的库有一个使用__call()扩展其他2个类的类,则只有主扩展类才能获得对象建议中列出的方法。

我注意到如果我在项目中创建另一个php文件,我在其中放置一个具有相同名称和命名空间的类,并让它扩展另一个类,IDE就不知道其中一个我指的是并且给了我们两个人的建议,这样就可以从两个扩展类中提出方法。

这有时会起作用,但在某些情况下,IDE是智能的,并且不知何故知道我的类不是真正的类,并且只显示主扩展中的方法。

有没有更好的方法告诉IDE库中的类有更多接合的功能?或者至少每次都有效的方式?

示例:

<?php // index.php
    include(__DIR__ . "/lib.php");
    $c = new c();
    echo $c->s_a();
    echo $c->s_b(); // Accepted by the IDE
    $d = new d();
    echo $d->s_a();
    echo $d->s_b(); // Not acceted by the IDE

<?php // lib.php
    class a {
        function s_a() { return "a";}
    }
    class b {
        function s_b() { return "b";}
    }
    class c extends a {
        public $b;
        function __construct() {
            $this->b = new b();
        }
        function __call($name, $arguments) {
            return call_user_func_array(array($this->b, $name), $arguments);
        }
    }
    class d extends c {}

<?php // fake.php
    class c extends b {};

对于$c,IDE不知道它是应该使用lib.php中的类c还是来自fake.php,所以它给出了一个包含两者方法的列表。

对于扩展c的类{d}的$d,它以某种方式知道文件lib.php中的类c,因此$d->s_b()不会被消化。

0 个答案:

没有答案
相关问题