web-dev-qa-db-ja.com

クラス定数のコーディング標準は何ですか?

クラス定数の適切な命名規則を理解しようとしています。

一般的な定数の場合、 コーディング基準 は次のように述べています。

定数は常に大文字で、単語を区切るためにアンダースコアを使用する必要があります。これには、事前定義されたPHP定数、TRUE、FALSE、NULLなどの定数が含まれます。モジュール定義の定数名には、定義されているモジュールの大文字のスペルをプレフィックスとして付ける必要があります。

ただし、オブジェクト指向の名前は、モジュールの前に名前を付ける、またはアンダースコアを使用する通常の規則に従っておらず、代わりにさまざまな形式のキャメルケースを選択します。そして、残念ながら、 オブジェクト指向のコーディング標準 はクラス定数についてまったく触れていません。

では、次のうちどれが正しいのでしょうか?

class Foo {
  const FOO_CONSTANT_VALUE = 'bar';
}

または

class Foo {
  const CONSTANT_VALUE = 'bar';
}

または

class Foo {
  const constantValue = 'bar';
}
3
user7

正しいものは次のとおりです。

class Foo {
  const CONSTANT_VALUE = 'bar';
}

たとえば、 Zend Frameworkの命名規則 の後に引用します(ただし、さまざまなフレームワークには他にもたくさんありますが、Googleだけです)。

定数には、英数字とアンダースコアの両方を含めることができます。定数名では数字を使用できます。

定数名で使用されるすべての文字は大文字にする必要がありますが、定数名のすべての単語はアンダースコア文字で区切る必要があります。

たとえば、EMBED_SUPPRESS_EMBED_EXCEPTIONは許可されますが、EMBED_SUPPRESSEMBEDEXCEPTIONは許可されません。

定数は、「const」修飾子を使用してクラスメンバーとして定義する必要があります。 "define"関数を使用してグローバルスコープで定数を定義することは許可されていますが、お勧めしません。

FOO_CONSTANT_VALUECONSTANT_VALUEですが、定数名でクラス名を使用しないのが一般的です。クラスのスコープ内にいることを考えると、これは完全に理にかなっています。

2
Maciej Zgadzaj

Drupal定数に関するコーディング標準は、クラスで定義された定数に対して引き続き有効です。唯一の違いは、クラスから定義された定数には、それを定義するモジュールを識別する接頭辞が必要ないことです。 ;その接頭辞は最終的にクラス名に追加されます。

Foo::CONSTANT_NAMEBar::CONSTANT_NAMEとは異なり、PHPはしないため、クラス名から派生したプレフィックスを定数名に追加する必要はありません。両方の定数が定義されている場合、エラーをスローします。

0
kiamlaluno