为什么我不能这样做:
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();
}
}