2

このコードをどこかで読んだことを覚えています:

<?php

class test {
    public $foo = 6, $bar;
}

$a = new test();
echo $a->foo; //6
echo $a->bar; //no output

コンマは で何をしpublic $foo = 6, $bar;ますか? を削除すると IDE でエラーが発生するのはなぜpublicですか? そうすることで が宣言されていることがわかります$barが、それがこのようにコーディングする唯一の理由だとは思いません。

4

2 に答える 2

4

コンマは機能的に次のものと同じです。

<?php
class test {
    public $foo = 6;
    public $bar;
}

$a = new test();
echo $a->foo; //6
echo $a->bar; //no output

基本的には、別のパブリック変数を宣言するだけです。public を削除すると、public 変数を宣言しなくなるため、IDE は文句を言います。人々がそのようにコーディングする理由は、スペースを節約するためです。これは、長い形式の省略形です。

于 2012-11-24T16:16:19.190 に答える
3

コンマは public $foo = 6, $bar; で何をしますか?

これにより、2 つのクラス プロパティ$foo(デフォルト値 6) と$bar(デフォルト値null) を同じアクセス修飾子で宣言できます。次publicのように、2 回繰り返す必要はありません。

public $foo = 6;
public $bar;

ちなみに、この値を文字列(空文字列)no outputに変換した結果です。null

public を削除すると、IDE でエラーが発生するのはなぜですか?

アクセス修飾子を指定せずにプロパティを指定することはできないためです。ドキュメントの引用:

クラスのメンバー変数は「プロパティ」と呼ばれます。public[...] これらは、 、protected、またはのいずれかのキーワードを使用して定義されprivate、その後に通常の変数宣言が続きます。[...]

PHP 4 との下位互換性を維持するために、PHP 5varではプロパティ宣言でpublicprotected、または の代わりに (または追加で) キーワードの使用を引き続き受け入れprivateます。var代わりにを使用してプロパティを宣言すると、PHP 5 はそのプロパティを として宣言されているかのように扱いますpublic

つまり、 を使用しない限りvar、PHPにはメンバー変数default access modifierに対する (または の特別な処理) というものはありません。そして、はい、それは一種の矛盾です-メンバー関数はアクセス修飾子なしで定義できるためです(その場合、それらはとして処理されます)。no access modifierpublic

...そして、それが、その紛らわしいunexpected T_VARIABLE, expecting T_FUNCTIONエラーメッセージの理由です。その$foo = 6ステートメントは、最終的には関数宣言として扱われます。

于 2012-11-24T16:27:12.567 に答える