0

PHP で親クラスのコンテンツにアクセスしようとしていますが、何らかの理由でプルスルーしたくないようです。私はOOPに非常に慣れていないので、何か提案があれば教えてください。以下は私のコードです:

class baseQuery {
    public static $numbers = "(1, 2, 3, 4, 5, 6, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 32, 39, 50, 52, 72, 109, 110, 850, 1839, 1968, 1969, 1970, 1972, 1973, 2364, 2365, 3009)";
}

class specificQuery extends baseQuery {
    public function __construct() {
        $numbers = $this->numbers;
    }
    public function test() {
        echo $numbers; //fails
    }
}
4

4 に答える 4

2

静的メンバーにアクセスする場合は、次の構文を使用する必要があります。

self::$varname

の代わりに実際のクラス名を使用して同じことを行うことができますself。phpに関する限り、メソッドは宣言していないtest()という名前の変数にアクセスしようとしています。または構文を$numbers使用しない場合、PHPはそれがローカル(または、本当に危険な場合はグローバル)変数であると見なします。$this->self::

于 2012-05-14T17:14:39.820 に答える
1

「LateStaticBindings」をお読みください。基本的に、staticキーワードを使用してnumbersプロパティにアクセスします。

class specificQuery extends baseQuery {
    public function test() {
        echo static::$numbers;
    }
}

オリジナルを拡張するクラスに$numbersを設定すると、基本クラスではなくアクセスされるため、staticoverselfを使用するのが好きです。

于 2012-05-14T17:14:02.437 に答える
0
class baseQuery {
    public static $numbers = "(1, 2, 3, 4, 5, 6, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 32, 39, 50, 52, 72, 109, 110, 850, 1839, 1968, 1969, 1970, 1972, 1973, 2364, 2365, 3009)";
}
class specificQuery extends baseQuery {
    public function __construct() {}

    public function test() {
        echo self::$numbers; // works :)
    }
}
于 2012-05-14T17:13:46.333 に答える
0

元のクラスを拡張する 2 番目のクラスでは、通常の変数を設定しています。それをどこかに保存する必要があります。

2 番目のクラスに新しいパブリック変数を割り当て、数値を保存してから関数に表示してみてください。

于 2012-05-14T17:10:06.663 に答える