kyutaro_kyutaroの日記

福岡でフロントエンドエンジニアやってます(Reactあたりを諸々勉強中)。よろしくお願いします。

PHPの特徴(メリット・デメリット・その他)についての私見

 技術的特徴のみならず、様々な観点からPHPの特徴をまとめてみました。あくまで現時点での自分の見解です。そもそも他の言語に詳しくないことによる的外れな意見などもあるとは思いますが、参考の程に見ていただけたらと思います。

...とその前に最初に言ってしまいますと、PHPはこれに尽きると思います。

「緩くて自由でとっつきやすい」……いい意味でも悪い意味でも

PHPの特徴

  • メリットの観点から
    • 手軽でスピード感のある開発が可能
    • 優しい言語。プログラミング初心者にとってもとっつきやすい
      • 例えば、初心者が動作を確認するまでの簡単さ。PHPだとxamppなどのツールがあり、ホスティングサービスなどではPHPを提供しているサービスも多い。「先ずはプログラムが動くことを実感したい」であろう学習者のモチベーションを保ち続けながら学習を進めることが出来る
    • 記事の豊富さ(問題解決の容易さ)
      • 非常に大きな利点。PHPはそのお手軽さからユーザーが多いので、必然的にPHPに関する記事も多く、解決方法も検索することで見つかることが多い
  • デメリットの観点から
    • 緩すぎる言語であること
      • 緩いことはPHPの代表的な特徴であり、これに助けられることもあるが、反面、緩すぎることで様々な問題を引き起こしてしまう
        • 後述するが、自動の型変換機能が基本的に何に対しても適用されてしまうことなどがその代表例。文字列や数値といった性質の全く異なる型の変換すら可能であることは、PHPのよくないところであると思う
        • 他の例として、関数の返り値に何でも宣言出来てしまうのは、よくない構造である。確かにbooleanか配列(あるいは文字列)を返す関数であれば、チェックも併せて行えるため、活用出来る機会もあるかもしれないが、配列か文字列を返すような関数は、後の処理を分散しなければならなくなり、却って複雑なコードに陥ってしまう危険性がある
      • 個人的な思いとして、この緩すぎさがもう少し固くなってくれれば、もっと良い言語になるのではないかと考えている
  • その他の観点から
    • 型の自動的変換機能
      • メリットでもあり、デメリットでもある
      • 比較的小規模な開発ではメリットと出来る。というのも、型の自動変換機能によってコードの量などを節約し、スピード感のある開発が可能になるからである。
        • 分かりやすい例は数値の自動変換である。本来は、数値型であってもintやfloatなど様々な種類が存在するが、PHPでは数値の型を気にせずに計算を行うことが出来る
        • ただし、文字列と数値を組み合わせるような場合には、明示的にキャストなどをしておいた方がよい
      • 型を気にしないことは、しばしば不具合の温床となるという点においてデメリットであると思う。一番起きやすいのは数値と文字列を連結したりすることによる不具合である。(大規模な案件でPHPというよりJavaが使われたりやすい事情はこのあたりのPHPの”ゆるさ”が影響していると思われる)
      • 常に型については念頭においた上でこの機能を活用するべきである
    • 配列関連の扱いやすさ
      • PHPだと、スカラー配列も連想配列も同じように書くことが出来るし、後からの追加も容易。例えばJavaなどでは、配列は数を事前に宣言しなければならないし、何より連想配列は専用の構文(HashMap)を使う必要がある。単純な一次元配列であればさほど気になる所ではないが、多次元配列などを扱うことになると、PHPの配列関連の”ゆるさ”は使いやすいし、コードもシンプルになる
        • ただ、Javaに精通した人にとってはかえってこのPHPの”ゆるさ”は問題だと思うのかもしれない
        • 書いていて気付いたが、配列の中に入っているのが、スカラー配列なのか、連想なのかが分からないというデメリットがある(これまで問題になったことはなかった気がするが)
    • フレームワークの豊富さ
      • 例えばRubyフレームワークといえば「Ruby on Rails」だが、PHPは「CakePHP」や「Laravel」、「symfony」などフレームワークが豊富であり、開発の内容(もしくは好み)などに合わせて最も適したものを選ぶことが出来る。ただ、これについてもやはりデメリットが存在する。というのも、そもそもフレームワーク選定にコストが必要なこと、また実際に使うことになった際、多少なりとも学習コストがかかるからである。(Rubyのようにフレームワークがほぼ一つと決まっていると、選定や学習コストを最低限に抑えることが出来る)

 

終わりに

 参照サイトなどを見つつ、自分がこれまで経験したこと等を元にPHPの特徴を書いていきましたが、改めてPHPでも関数の書き方などを見直す機会となりました。今後別の言語などを使っていく機会があれば、その時に改めてこのPHPの特徴などを更新していこうかとかと思います。

 

参照サイト