在没有深入杂草的情况下,我正在寻找一种将类型分配给静态 php 类变量的方法,主要是为了让 php intelephense 在某个用例中工作。
class ExampleClass {
public static $variable;
public static function sampleFunction1(){
self::$variable = Utils::init();
self::$variable->getAddress(); // <--Intelephense works
}
public static function sampleFunction2(){
self::$variable->getAddress(); // <--Intelephense doesn't work
}
}
class Utils {
/**
* Initializes SampleClass
*
* @return SampleInterface
*/
public static function init() {
return new SampleClass();
}
}
interface SampleInterface {
public function getAddress();
}
class SampleClass implements SampleInterface{
public function __construct() { }
public function getAddress(){
}
}
在其他严格的语言中,您可以强制转换或将其专门定义为 SampleInterface 的类型。这可能只是 php 的限制,或者我可能会以错误的方式解决这个问题,感谢任何帮助!:)
- 更新 -
我在 ExampleClass 中添加了 getter 和 setter 来解决问题。
/**
* @return SampleInterface
*/
public static function getVariable() : ?SampleInterface{
return self::$variable;
}
/**
* @param SampleInterface $variable
*/
public static function setVariable(SampleInterface $variable) {
self::$variable = $variable;
}