0

このようにクラスAの動的プロパティを介してクラスBから定数を呼び出せないのはなぜですか?私は何か間違ったことをしていますか?

class A {
    public $class_b;
}

class B {
    const CONST_VAR = 'b';
}

$class_a = new A();
$class_a->class_b = new B();

echo $class_a->class_b::CONST_VAR;

PHP解析エラー:構文エラー、予期しないT_PAAMAYIM_NEKUDOTAYIM、「、」または「;」が必要です 14行目の/root/1.phpにあります

ただし、このように呼び出すことは問題ありません。

$b = $class_a->class_b;
echo $b::CONST_VAR;
4

1 に答える 1

1

クラス定数は静的です。$ class_b変数にクラスBのインスタンスがあるため、定数を返すクラスBで非静的関数を作成しない限り、クラスAを介してアクセスしないでください。例えば:

class B {
    const CONST_VAR = 'b';

    function get_constant() {
        return self::CONST_VAR;
    }
}

これで、次を使用できます。

 $class_a = new A();
 $class_a->class_b = new B();
 $class_a->class_b->get_constant();

ただし、B :: CONST_VARを使用できるため、クラスbのオーバーロードを計画していない限り、この方法でこれを行う理由は実際にはありません。

 echo B::CONST_VAR; // prints 'b'

ここでクラス定数について読んでください:http://php.net/manual/en/language.oop5.constants.php

php 5.3.0以降、定数は$ b :: CONST_VARのようなインスタンスを介してアクセスできることに注意してください。ただし、これは定数の使用方法ではなく、不適切なプログラミングをサポートするためにのみ追加された可能性があります。

于 2012-11-09T18:52:38.907 に答える