0

在没有深入杂草的情况下,我正在寻找一种将类型分配给静态 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;
}
4

0 回答 0