PHPによるプログラミングに関する世界観(A.戯言)です。
パーフェクトPHP (PERFECT SERIES 3)を参考にしています。
実際、PHPの開発は簡単です。なぜなら、HTMLの中に埋め込んで、echo()で表示するだけでいいからです。
もっと賢くしたいなら、関数で文字列を返すようにして、それをさまざまな場所から呼び出して、その結果をecho()でその都度表示することもできます。
文字列を表示するだけではなく、関数からHTMLコードを返して表示することだって簡単です。
関数をたくさん作れば、自由自在に関数をさまざまなところから呼び出すこともできます。
また、HTMLが不得意とすることのひとつに、「繰り返しや条件分岐などのフロー制御」が挙げられますが、まさしくPHPを使うことで、繰り返し表の列と行を表示することができます。
さらに応用すると、「HTMLとSQLの融合」のようなことができます。全体のビューはHTMLで作っておいて、ひとつひとつのデータ、たとえば掲示板のコメントのどうなデータを、データベースにリアルタイムで記録し、この情報をHTMLの中で表示するのです。
先ほどの繰り返しや条件分岐を使って、SQLによるデータベースレコードからデータを取り出して、それを反映したHTMLを繰り返しで整形して表示することもできます。
また、PHPでは、スーパーグローバル変数を使って、直観的にフォーム入力を受け取ることができます。セキュリティに注意する必要がありますが、HTMLだけではこれは実現できません。
最近のPHPでは、オブジェクト指向の設計を行うことも可能ですが、まずはあまり構えずに、このように関数的にPHPを使うのが良いと思います。
たとえば、ユーザー名を取得するのであれば、ユーザー名を取得するだけの関数を作って、この関数を別の関数から呼び出すことで、ユーザー名を取得するという「問題」は解決されます。
動画のリストを作るのであっても、それだけの関数を作ります。コメント表示機能、コメント投稿機能、検索機能、いいね機能、フォロー機能、設定変更機能、なんでもかんでも関数を作って「問題解決」を行います。
しかしながら、この方法では、関数に一時的にローカル変数を作ることはできますが、関数と関数の間でデータを共有したり保持したり、といったことが難しくなってしまうでしょう。結局、そうしたことを実現するには、やはりオブジェクト指向を用いたクラスの設計が重要になってくるでしょう。
CGIやPHPの特徴として、ステートレス、すなわち状態がないことが言えます。そのため、Webアプリケーションでは、なんらかの外部のデータファイルに出力しない限り、あるデータをいつまでも保持し続ける、ということが不得意です。しかしながら、PHPではSQLデータベースにデータを永続化できます。O/Rマッピングのような技術を使えば、データを永続化できます。しかしながら、そのように本当にサービスが高度になってくると、すべてを自力で実装するのは大変です。そのために、フレームワークを使うことができるでしょう。
パーフェクトPHP (PERFECT SERIES 3)でも書かれているように、ロジックとビューをできるだけ分離しましょう。
PHPの良さとは、「HTMLの中にコードを埋め込める」ということでした。
ですが、なんでもかんでもHTMLの中に埋め込んでしまうと、保守性の悪いプログラムができてしまいます。
また、デザイナーとエンジニアで作業を分担する際に、デザイナーはデザイン用のコードファイル、エンジニアはロジック用のコードファイルをそれぞれ別のファイルとして編集できるようにしたほうがよいでしょう。
なので、いくらPHPがHTMLの中にコードを埋め込めるといっても、ひとつのhoge.phpファイルの中にすべてを詰め込むようなアプリケーションは避けるべきです。
できるだけ、ロジックとビューは分離するようにしましょう。
また、ロジックとビューを分離するのと同様に、ロジックとデータも分離しましょう。
プログラムコードの中にデータ要素がすべて書かれていると、データを書き換えるだけの作業であっても、データと一緒にプログラムコードファイルを編集しなければなりません。
また、繰り返し、データがプログラムのさまざまな場所に点在するようになると、さらに作業が難しくなります。
なので、ロジックにはプログラムロジックだけを記述し、データはひとつの場所に、繰り返し要素をできるだけなくした上で記述し、ロジックとデータを分離しましょう。
MVCフレームワークでは、データベースサーバーを使う際に、データベースサーバーに接続する部分や、特定のデータベーステーブルの設計に依存する部分は、ロジックとは別に「モデル」として分離します。
理想的なプログラムとは、ロジックとビューとデータ(モデル)がそれぞれ分離され、保守しやすいように整理されたプログラムです。PHPを開発する際には、ビューもデータもロジックもごちゃ混ぜにするのではなく、それぞれ別のファイルに分離して、それぞれのファイルの中で保守しやすいように記述することが推奨されます。
プログラマの間で、PHPを推す声は強いです。たとえば、Laravelのような優れたフレームワークがあることが、このような声の由来です。
ですが、同時に、PHPはダメ言語と良く言われます。
僕はその理由をあまり知りませんが、言語設計やセキュリティなどの理由から、最近はPHPは「仕事で使う機会は多いが、良い言語とは思わない」という人が増えています。
本当のハッカーになりたいのであれば、Pythonを使いましょう。特にDjangoはWebフレームワークとしてとても優れています。
PHPは、Linux + Apache + MySQL + PHP (Perl/Python)のLAMPスタックの中核に位置する言語です。
軽量で簡単に作れて便利なLAMPスタックですが、最近はWordPressの登場やRuby on RailsをはじめとするWebフレームワークの進歩があり、LAMPをじかで使うことは少なくなっています。
PHPは、Web上のツールからスタートしたこともあり、「馬鹿な言語」だと言われることもあるが、HTML、XML、CSS、SQL、JavaScript、JSON、そしてMVCフレームワークやWordPressなど、その技術の豊富さはナンバーワンである。
セキュリティなどの知らなければならない技術上の知識も多いし、HTTPサーバーやデータベースの常識も求められる。
特に、たとえばバーチャルホストなど、Apacheの設定でさまざまな指定をすることが多く、とてもたくさんの技術がある。一部では、「人間と見分けがつかない」と言う人間が多い。
Ruby on RailsやDjangoのようなWebフレームワークの時代において、PHPは既に必要のない技術なのでしょうか。
それは間違いです。なぜなら、「基本を押さえておくことは大切」だからです。
実際、Webフレームワークを使っていても、「このフレームワークでは簡単にできないけれど、自分でPHPコードを書けばすぐにできるような処理」というのはあると思います。
また、Ruby on Railsのような技術は、新しい技術が生まれては消えていき、すぐに古いものになります。
そうした時、PHPのような「基本となる技術のやり方」を知っておくと、長い間通用する「本当のスキル」というのが身につきます。
PHPができなくてもRailsの開発はできるでしょうが、PHPができることで、RailsやWebの仕組みをより深く広い視点で、自分の「力」として見ることはできると思います。
よって、Railsを勉強するのであっても、PHPを先に勉強しておくことは、とてもためになります。同じことを言いますが、Railsの理解がより深く、広いものになるでしょう。
PHP 8.0がリリースされましたが、今回の目玉はJITによる高速化です。PHPをネイティブコードにコンパイルして使いまわすことで、高速化されます。
一部では「PHP、これはもうコンパイル言語なのでは?」と言われています。