考虑以下类结构:
trait MyTrait {
public function definedFunction() {
}
}
interface MyInterface {
}
class A {
public function test() {
if ($this instanceof MyInterface) {
// my intelisense tells me that the definedFunction() is not defined
$this->definedFunction();
}
}
}
class B extends A implements MyInterface {
use MyTrait;
}
我能否以某种方式告诉我的智能感知(使用文档块或任何东西),在那种特定情况下,definedFunction
确实定义了?上面的代码有效,尽管 intelephense 抱怨它,我可以用 docblock 或其他东西禁用该抱怨吗?
另一方面,有没有其他方法可以重构我的代码以让智能感知了解这种方法?基本上,我在这个结构上做错了吗?
我想要实现的是,以下:class A
是一个模板类,它由一堆其他类扩展。其中一些其他类应该能够使用一些常用方法,但不是全部。因为我无法在 PHP 中扩展多个类,所以我尝试使用traits
. 如果我碰巧遇到这种类之一,我会interface
用它实现一个(以某种方式对它进行分组以供以后访问),并告诉它使用 defined trait
,以获取所有添加的功能。我在上面的例子中调用test
的函数,是所有扩展的类都class A
必须能够访问的函数,但是当一个类时implements MyInterface
,该函数应该获得一些附加的功能。这就是为什么我没有把它放入trait
我正在定义的内容中。