0

なぜ私はこれを行うことができません:

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

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

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

基本的に、問題は2行目にあります。クラスで変数を宣言しているときに、静的メソッドを呼び出すことができません。

4

4 に答える 4

1

言語がサポートしていないため、これを行うことはできません。

PHP5 オブジェクト モデルでは、メソッドは静的または動的です。あなたは選ばなければなりません。同上クラスのプロパティ。

ただし、クラス内またはクラス外のいずれかで静的メソッドを呼び出すために__get()を宣言することにより、プライベート クラス変数の使用とオブジェクトのオーバーロードの使用を止めるものは何もありません。プライベート変数の isset テストを実行し、静的メソッドを呼び出します。最初の呼び出し。

self::コンストラクトを使用して、いつでも静的プロパティとメソッドを参照できることに注意してください。

于 2012-07-06T10:48:49.283 に答える
1

次のように定義する必要があります。

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

次に、次のことができます。

self::$dir;

静的関数で。

于 2012-07-06T10:53:11.390 に答える
1

コンパイル時に $dir を割り当てています。オブジェクトの初期化時にコンストラクターでこれを行うことができます

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

このクラスのインスタンスをいつ作成するか$this->dirが設定されます。

于 2012-07-06T10:50:35.377 に答える
0

あなたは何かをする必要はありませんか?

class MyClass{
    public $dir;

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