调用第二个类的静态方法来声明类中的变量


Calling a Static Method of Second Class to Declare Variables in a Class

为什么我不能这样做:

class MyClass{
    public $dir = 'root/'.Util::getDir();
    public function getURL($file){
        $fullUrl = $this->dir . $file;
        return $fullUrl;
    }
}
echo MyClass::getUrl('my.pdf');

基本上,问题出在第二行。在类中声明变量时,我无法调用静态方法。

您无法执行此操作,因为该语言不支持它。

在 PHP5 对象模型中,方法要么是静态的,要么是动态的。 你必须选择。 同上类属性。

但是,没有什么可以阻止您使用私有类变量并通过声明 __get() 在类内或类外调用静态方法来使用对象重载。 只需对私有变量进行 isset 测试,并在第一次调用时调用静态方法。

请记住,您始终可以使用 self:: 构造引用静态属性和方法。

您需要将其定义为:

public static $dir= '/some/path/';

然后你可以做:

self::$dir;

在静态函数中。

你在编译时分配$dir你可以在对象初始化时的构造函数中执行此操作

class MyClass{
  public $dir;
  public function __construct(){    
     $this->dir = 'root/'.Util::getDir();
    }
}

创建此类的实例时,将设置$this->dir

你不必做类似的事情吗

class MyClass{
    public $dir;
    public function setDir(){
        $this->dir = 'root/'.Util::getDir(); 
    }
}