0

为什么我不能这样做:

class MyClass{
    public $dir = 'root/'.Util::getDir();

    public function getURL($file){
        $fullUrl = $this->dir . $file;
        return $fullUrl;
    }
}

echo MyClass::getUrl('my.pdf');

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

4

4 回答 4

1

你不能这样做,因为语言不支持它。

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

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

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

于 2012-07-06T10:48:49.283 回答
1

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

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

当您将创建此类的实例时$this->dir将被设置。

于 2012-07-06T10:50:35.377 回答
1

您需要将其定义为:

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

那么你可以这样做:

self::$dir;

在静态函数中。

于 2012-07-06T10:53:11.390 回答
0

你不必做类似的事情

class MyClass{
    public $dir;

    public function setDir(){
        $this->dir = 'root/'.Util::getDir(); 
    }
}
于 2012-07-06T10:36:55.570 回答