如果我使用的库有一个使用__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()
不会被消化。