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

时间:2012-07-06 10:30:54

标签: php oop class

为什么我不能这样做:

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

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

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

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

4 个答案:

答案 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(); 
    }
}