为什么我不能这样做:
class MyClass{
public $dir = 'root/'.Util::getDir();
public function getURL($file){
$fullUrl = $this->dir . $file;
return $fullUrl;
}
}
echo MyClass::getUrl('my.pdf');
基本上,问题在于第二行。在类中声明变量时,我无法调用静态方法。
答案 0 :(得分:1)
你不能这样做,因为语言不支持它。
在PHP5对象模型中,方法是静态的或动态的。你必须选择。 Ditto类属性。
但是,没有什么可以阻止你使用私有类变量并使用对象重载通过声明__get()来调用类或类外的静态方法。只需执行一个isset测试私有变量和在第一次调用时调用静态方法。
请记住,您始终可以使用self::
构造来引用静态属性和方法。
答案 1 :(得分:1)
您在编译时分配$ dir,您可以在对象初始化
的构造函数中执行此操作class MyClass{
public $dir;
public function __construct(){
$this->dir = 'root/'.Util::getDir();
}
}
当您要创建此类$this->dir
的实例时,将设置。
答案 2 :(得分:1)
您需要将其定义为:
public static $dir= '/some/path/';
然后你可以这样做:
self::$dir;
在静态功能中。
答案 3 :(得分:0)
你不必做类似的事吗
class MyClass{
public $dir;
public function setDir(){
$this->dir = 'root/'.Util::getDir();
}
}