3

現在、PHP 5 OOP(プロパティセクション)を読んでいて、次のステートメントを見つけました。

クラスメソッド内で、プロパティ、定数、およびメソッドには、$this->propertyの形式を使用してアクセスできます。

奇妙なことですが、その形式を使用して定数にアクセスすることはできません。次のコードで通知が表示されます。

class A
{
    const HELLO = 'HELLO WORLD';

    public function __construct()
    {
        echo $this->HELLO;
    }
}

$a = new A();

私は何かを誤解しましたか、またはドキュメントの作成者が間違いを犯しましたか?

4

6 に答える 6

3

一定の試行にアクセスするには

class A
{
    const HELLO = 'HELLO WORLD';

    public function __construct()
    {
        echo self::HELLO;
    }
}
于 2012-10-28T16:01:43.813 に答える
2

マニュアルのエントリは、実際には少し誤解を招くものでした。定数とメソッドへの参照は削除しました。これらはプロパティに関する章に属していないからです。新しい段落は次のようになります。

クラスメソッド内では、-> (オブジェクト演算子): $this->property (プロパティはプロパティの名前) を使用して、非静的プロパティにアクセスできます。静的プロパティには、:: (ダブル コロン): self::$property を使用してアクセスします。静的プロパティと非静的プロパティの違いの詳細については、静的キーワードを参照してください。

すべてのミラーに変更が反映されるまで、最大 1 週間かかる場合があります。

ご指摘ありがとうございます。

于 2012-10-28T17:46:52.790 に答える
0

定数にはself、クラス名またはクラス名を使用してアクセスします。同じクラスの場合:

self::HELLO

別のクラスで使用している場合:

A::HELLO 
于 2012-10-28T16:02:03.193 に答える
0

あなたが使用する必要がありますself::HELLO

于 2012-10-28T16:02:29.710 に答える
0

これについての最も明確な説明は、PHP マニュアルのクラス定数ページにあります。クラス内からは を使用して定数にアクセスし、アクセスにself::constant使用するクラスの外部からは定数Classname::constantにアクセスします。

あなたの例では、次を使用します:-

class A
{
    const HELLO = 'HELLO WORLD';

    public function __construct()
    {
        echo self::HELLO;
    }
}

$a = new A();

または、クラスの外から:-

echo A::HELLO;

しかし、私がリンクしたマニュアルページの説明は素晴らしく、非常に明確です。

クラスに含まれる定数にアクセスするためにクラスをインスタンス化する必要はないことを指摘しておく必要があります。以下が機能します:-

class A
{
    const HELLO = 'HELLO WORLD';
}

echo A::HELLO;
于 2012-10-28T16:25:11.737 に答える
0

クラス自体では、 static: と同じように定数にアクセスしself::MY_CONSTANT、クラスの外では、 を使用して参照しますClass_Name::MY_CONSTANT。疑問がある場合(または抽象クラスの例など)、私は次を使用するのが好きです:

$self = get_called_class($this);
$self::MY_CONSTANT;//gets the constant of currently called class

これを覚える簡単な方法: PDO クエリを考えてみましょう:

$stmt->fetch(PDO::FETCH_ASSOC);//<-- uses class constant
于 2012-10-28T16:27:47.057 に答える