PHP開発者は関数を恐れていますか?

最近、気になったことが1つあります。PHPプログラマは関数を使用していません。



おそらく、一般化が強すぎるので、明確にしましょう。ある程度の習熟度に達したPHP開発者は、実際のクラスやメソッドではなく、通常の関数の作成を実質的に停止します。 いずれにせよ、この印象は、ライブラリとオープンソースフレームワークのコードを見ると発展します。 それ以外のすべての「クール」ライブラリは、匿名関数を使用します。



他の言語では、状況はまったく異なります。 Pythonコードの大部分はクラス定義で構成されていますが、通常の関数の余地もあるとします。



PHPでは、通常、関数は2つの場合に使用されます。プログラマーがOOPを実行する方法を知らないか、スクリプトが非常に単純であるため、OOPをフェンスする意味がありません。 ヘルパー関数などのようなものはないようです。



そして、これはある意味で私を悩ませます。すべてをクラスに押し込むのは間違っていると思います。 このアプローチは、クラスを使用すること自体が目的になったときに、クラス指向プログラミングにつながります。 (思い出させてください:クラスが存在するだけでは、コードはオブジェクト指向になりません!)



さらに、私は、言語の中核にますます多くの新しい関数が出現する理由は、ヘルパーの嫌いにあると信じています。 つい最近、数人がarray_rand_value



追加を求めました。 彼女はarray_rand



と同じことを行い、キーではなく値のみを返します。 クライアントコードでは、2行で記述できます。



 function array_rand_value(array $array) { if (empty($array)) return null; return $array[array_rand($array)]; }
      
      





小さな機能、そのようなものはありません。 しかし、ここで私の意見で最も重要な困難が生じます:それをどこに置くか? そして、スタートアップと友達を作る方法は?



PHPは、主にJavaからのOOPモデル、特に1対1の対応、つまり1つのクラス-1つのファイルを採用しています。 言語自体はこれを必要としませんが、これは一般に受け入れられている合意です。 さらに、起動メカニズムとPSR-0標準によってサポートされています。



他のPHPライクな言語にはありません。 たとえば、Pythonでは、複数のクラスと関数を1つのファイルにグループ化することは非常に普通です。この言語では、ファイルはモジュールであり、相互接続されたコンポーネントのセットです。 明らかに、このような組織では、機能の場所を見つけるのがはるかに簡単です。



私は一般的に、クラスに対するそのような明確な対応-ファイルはPHPの問題の原因であると考えています。 関数の複雑さに加えて、小さなクラスを作成するには追加のコストがかかります。 適切なOOPは多くの場合、多数の小さなクラスを生成します。これは、サポート、コードの再利用、およびテストの点で優れています。 ただし、各クラシックのPHPでは、独自のファイルを開始する必要があります。 そして、それは本当に私を怒らせます。 私は、単一のファイルに住んでいる12の短いクラスにまったく恥ずかしくない。 しかし、それらのそれぞれに対して10個のファイルを作成することは、本当に非効率的です(そして、サポートを複雑にします)。



同時に、もう1つの「一般に受け入れられている」アプローチについても言及しますが、これは好ましくありません。これらは冗長なコメントブロックです。 大部分のケースでは、キャプテン自身がエビデンスにphpdocを配置し、それらのコードは2〜3回膨らみます。 本当に必要なブロックに対しては何もありませんが、ほとんどの場合(少なくともアーキテクチャ的に優れたコードでは)、メソッドの名前とパラメーターはそれ自体を物語っています。



ですから、もっと簡潔にする価値があると思います。各クラスのファイルを作成する代わりに、小さなクラスを1つのファイルに結合します。 小さなことごとにクラスを作成する代わりに、関数を作成してください。 役に立たないドックブロックでコードを詰まらせるのではなく、必要なときだけ残してください。



そのような考えです。 たぶん私はすべてを理解していないのでしょうか?



All Articles