为什么我不能这样做:
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::
构造来引用静态属性和方法。
您在编译时分配 $dir 您可以在对象初始化时在构造函数中执行此操作
class MyClass{
public $dir;
public function __construct(){
$this->dir = 'root/'.Util::getDir();
}
}
当您将创建此类的实例时$this->dir
将被设置。
您需要将其定义为:
public static $dir= '/some/path/';
那么你可以这样做:
self::$dir;
在静态函数中。
你不必做类似的事情
class MyClass{
public $dir;
public function setDir(){
$this->dir = 'root/'.Util::getDir();
}
}