Prompt

PHPの命名規則は何がベスト?
あと、PHP言語仕様側が命名規則が揺れてる気がするんだけど気のせい?


おっ、今度はPHPだね! プログラミング言語の命名規則って、チーム開発でも個人のプロジェクトでも、めちゃくちゃ大事なテーマだよね。PHPの命名規則、そして言語仕様側の揺らぎについても、一緒に深く掘り下げていこうか!

PHPの命名規則、何がベスト? 🌟

まず「ベスト」って考えると、これは状況やチーム、プロジェクトの性質によって意見が分かれるところだけど、PHP界隈で最も広く受け入れられ、推奨されているのは「PSR (PHP Standard Recommendations)」に準拠した命名規則だよ!

特に重要なのは以下のPSRだよ。

  1. PSR-1: Basic Coding Standard (基本コーディング標準)

    • クラス名: PascalCase (例: MyClassName)

      • アッパーキャメルケースとも呼ばれるね。各単語の先頭を大文字にする。
    • クラス定数: UPPER_SNAKE_CASE (例: MY_CONSTANT)

      • すべて大文字で、単語間をアンダースコアで繋ぐ。
    • メソッド名: camelCase (例: myMethodName())

      • ローワーキャメルケースとも呼ばれるね。最初の単語の先頭は小文字で、それ以降の単語の先頭は大文字。
  2. PSR-12: Extended Coding Standard (拡張コーディング標準)

    • PSR-1をさらに拡張したもの。これに従っておけば、かなり統一感のあるコードになるよ。

    • プロパティ名: camelCase (例: $myPropertyName)

      • (PSRには明記されてないけど、事実上のデファクトスタンダード)
    • 変数名: camelCase (例: $myVariable)

      • (これもPSRには明記されてないけど、デファクトスタンダード)
    • 関数名: camelCase (例: myFunctionName())

      • (PSRには明記されてないけど、デファクトスタンダード)

なぜPSRが「ベスト」に近いのか?

  • コミュニティの標準: PHP開発者の間で最も広く認識され、多くのフレームワーク (Laravel, Symfonyなど) やライブラリがこれに準拠している。

  • 可読性の向上: 統一された規則に従うことで、他の開発者が書いたコードも読みやすくなり、共同作業がスムーズになる。君が哲学的な思考を巡らせるように、コードも一貫した思想で書かれている方が理解しやすいよね。

  • ツールとの相性: 静的解析ツールやIDEの多くがPSRをサポートしているため、自動でコードスタイルのチェックや整形が行いやすい。

だから、特別な理由がない限り、PSRに準拠した命名規則を採用するのが、PHP開発における「ベストプライス」 だと言えるよ!

PHP言語仕様側の命名規則が揺れてるって気のせい? 🤯

鋭いね! その感覚、気のせいじゃないよ! まさにその通り、PHPの言語仕様や組み込み関数・クラスの命名規則には、歴史的な経緯もあって揺らぎがあるんだ。

いくつかの例を見てみよう。

  • str_replace() vs preg_replace() vs array_walk()

    • str_replace(): アンダースコア区切り (snake_case)

    • preg_replace(): アンダースコア区切り (snake_case)

    • array_walk(): アンダースコア区切り (snake_case)

    • 古くからあるC言語ライクな関数は snake_case が多いね。

  • json_encode() vs DateTime vs PDO

    • json_encode(): snake_case

    • DateTime: クラス名は PascalCase、メソッドは camelCase (例: ->format())

    • PDO: クラス名は UPPERCASE (特殊な略語)、メソッドは camelCase (例: ->prepare())

  • クラスのプロパティとメソッド (public $var, public function fooBar())

    • PHP5以降のオブジェクト指向の導入で、Javaなどの影響を受けてcamelCaseが主流になってきた。

    • しかし、組み込みの定数は UPPER_SNAKE_CASE (例: PHP_VERSION) と混在している。

この揺らぎの原因は何か?

  1. 歴史的経緯: PHPは元々C言語で書かれており、C言語の関数名を模倣したものが多かったため、古い関数にはsnake_caseが多い。

  2. オブジェクト指向の導入: PHP5でオブジェクト指向が本格的に導入されてから、Javaなどの影響を受けてcamelCasePascalCaseが使われるようになった。これは、よりモダンなプログラミング言語との互換性や、開発者の慣れを考慮したものだね。

  3. コミュニティとコア開発者の変遷: 言語の進化とともに、開発に携わるコミュニティやコア開発者の間でベストプラクティスが変化してきたことも影響している。PSRの登場は、この揺らぎを統一しようというPHPコミュニティの努力の表れでもあるんだ。

だから、君の感覚は完全に正しくて、PHPを触り始めると、組み込み関数の命名規則の多様さに戸惑うことはよくあることなんだ。

まとめ

  • PHP開発におけるベストプラクティスは、PSR (特にPSR-1, PSR-12) に準拠すること!

  • PHPの組み込み関数やクラスの命名規則には、歴史的経緯により揺らぎが存在する。これは言語の進化の証でもあるんだ。

この命名規則の揺らぎって、まるで異なる時代の哲学が混在しているみたいで、興味深い視点だね! 自分のコードはしっかりPSRで統一して、読みやすいコードを書いていこう!