10

お気に入り:

public
  $foo        = null,
  $bar        = 10;

protected

  $_stuff     = null,
  $_moreStuff = 5;

多くの人がこれを行っているようです。なんで?

これは一貫性のない命名ではありませんか (一部の PHP 関数のように :))?

4

5 に答える 5

11

これは、php5 より前の時代からの古い規則です。

Php4 はパブリックな可視性しか持っておらず、どういうわけか人々は、プロパティがパブリックかプライベートかを判断できるようにしたいと考えていました (メソッドについても同様です)。アンダースコア プレフィックスは、外部から使用することを意図していないプライベート メンバーまたはメソッドを示します。

厳密に言えば、クラス メンバーの可視性を明示的にマークできる php5 では不要ですが、この規則は今でも一般的です。ユーザーは、これによりコードのスキミングが容易になると主張しています。外部からその関数を呼び出すことができるかどうかがすぐにわかるからです。これは、個人の好み、または特定のプロジェクトのコーディング スタイルによって異なります。

于 2012-08-17T21:54:58.877 に答える
10

それは、個人的な好みという 1 つのことに帰着します。

私自身も、その命名規則を使用している一人です。protected変数であれ関数であれ、またはアンダースコアを前に付けることでprivate、私自身と私が定期的に一緒に仕事をしている他のプログラマーは、その変数がグローバルであり、現在のクラス/コンテキストの外ではアクセスできないことを知ることができます.

ユースケースを明確にするのに役立つ例は、クラス メソッドの場合です。

class Example {
    public function firstFunction() {
        // do stuff
    }

    protected function _secondFunction() {
        // do more stuff
    }
}

class を使用するコードを書いているときExample、またはクラス自体の内部で作業しているときに_secondFunction()、それが public 関数ではないことがすぐにわかり_ます。実際の関数宣言を見つけて修飾子を確認する必要はありません。firstFunction()反対に、それは公開されていないため、公開されていることがわかります。

于 2012-08-17T21:54:38.817 に答える
3

アンダースコアは、変数に何らかの特別なプロパティがあることを意味する記号です (事前に定義されており、組織ごとに、またはプログラマーごとに変更できます)。伝統的に、それは何かが公開されていないことを意味します。関数でさえ、次のように記述されることがあります。

protected function _myProtectedFunction(){}

ただし、PHP は (2 つのアンダースコア) で始まるすべての関数名を魔法のように予約していることにも注意してください。文書化された魔法の機能が必要でない限り、PHP では__関数名を使用しないことをお勧めします。__

于 2012-08-17T22:00:36.787 に答える
1

比較として、Python は設計上プライベート/パブリックを持たず、アンダースコアを使用して区別を伝えます。PEP 8 のこのセクションを参照してください。

http://www.python.org/dev/peps/pep-0008/#designing-for-inheritance

したがって、これは必ずしもPHP5 以前の古い慣習であるは限りません。Python と同じ理由で、人々は意図的にそれを行っている可能性があります。

于 2013-12-17T18:54:05.387 に答える
-2

それは間違いなく個人的な好みです。PHP では $_GET と $_SESSION が既にそのように行われているため、彼らはそれを行う可能性があります。

于 2012-08-17T21:56:42.007 に答える