聞いたら一生の宝、プログラミングの基礎の基礎

第2回PHPの基礎を見直す

PHPについて見なおそう

みなさんこんにちは、WebアプリケーションではPHPを使ったものが世の中にあふれています。

TOIBE発表ではシェアがここ五年で10.3%から3.9%と激減していますが、まだまだ日本のwebアプリケーション開発では多く用いられています。

第1回では、フロントエンドで利用されているJavaScriptの基礎を振り返りましたが、今回は同じWebアプリケーション開発のバックエンドでよく利用されているPHPの基礎の部分を振り返りたいと思います。

PHP

Webアプリケーションを作成するのに特化したサーバサイド側のプログラム言語のひとつです。

PHPの特徴としては下記のことがあります。

  • 初心者でも理解しやすい。
  • ほとんどのウェブサーバと有名OSでモジュールでもCGIでも動作します。
  • プログラムの記述方法も手続き型、オブジェクト指向、両方の混在で記述できます。

このように導入までのハードルの低さが特徴でもあります。

よってホスティングサービスにおいても、多数で利用できるため手軽にWebサービスを構築できます。

PHPのコーディング規約

前回でもコーディング規約から始めましたが、チーム開発する際の規約設定は重要です。

また、PHPは企業により独自フレームがあったりなど記法が多く存在しています。

その中でコーディング規約として用いられるものは以下のものが多いです。

  1. PEAR標準コーディング規約
  2. フレームワークの記法に合わせたもの
  3. PHP-FIGPHP Framework Interop Group制定のコーディング規約(PSR-0、PSR-1、PSR-2)
  4. 社内/グループ内のコーディング規約
  5. PEAR標準コーディング規約

    PHPのオープンソースライブラリであるPEARの公式ディストリビューションに含まれるコードに適用される規約

    各フレームワークの記法

    利用するフレームワークのコーディング規約それぞれに制定されている規約

    PHP-FIG制定のコーディング規約

    CakePHP,Laravel,Zend Framework 2などの主要フレームワーク開発グループによってまとめられているコーディング規約

    CodeIgniter

    社内/グループ内のコーディング規約

    この中で、1のPEARと2の各フレームワークの大部分については3のPHP-FIGが制定している規約で吸収できています。なので、PHP-FIGの規約に準拠するのが最も汎用的なソースコードを書くことになります。

    ただ、FuelPHPやCodeIgniterはPHP-FIGに参加していないため上記の限りではありません。

    4の社内のコーディング規約については避けられないものもありますが、なるべく排除していく方向に導きましょう。

    また、以下の相談のようにせっかくコーディング規約を設定しても守られないことが多々あります。

    記述時に徹底するのではなく開発ツール側で整形してしまうというのも提案してみましょう。

PHPのフレームワークは何を使う?

コーディング規約の項であげたようにPHPでは現在多くのフレームワークが利用されています。

Laravel,CodeIgniter,CakePHP,FuelPHPなど様々なものがあります。

フレームワーク特徴バージョン
Laravel最近世界ナンバーワンのシェアに躍り出た5.0.16
CodeIgniter軽量で速度重視。汎用的で豊富なライブラリが用意されている2.2.1
CakePHP日本でナンバーワンのシェア。Ruby on Railsの概念を取り入れている。3.0.0
FuelPHPCodeIgniterと同じ開発者。HMVCパターンを用いる1.7.2

2015/03/23 現在

HMVCパターン モデル=ビュー=コントローラパターンであるMVCから派生した階層構造されたMVCパターン

無名関数はなぜ必要?

PHPのサンプルを見ているうちに以下の様な記述を見たことはありますでしょうか.

add_action("hoge",function(){
    …
});

これはこのような記述と同等です。

function foo(){
    …
}
add_action("hoge","foo");

このように関数名を指定しない関数は無名関数と呼ばれます。

無名関数を知らなくても実装するのに困らないのになぜ必要なのでしょうか。

知らなくても実装には支障はないです。しかし知っていると、とても便利です。そんな話を聞いてかどうかはわかりませんが、teratail内でも無名関数の質問が複数ありますので紹介させていただきます。

無名関数とはその名の通り、関数名を定義しない関数のことです。

一般的な関数は名前を定義し、機能を再利用しやすくなっています。しかし、無名関数は名前がないため利用したいときに機能を準備する必要があり利用箇所が限定的になります。

一般的な関数で再利用可能なことは便利だと思います。しかし、広範囲で利用可能だということは良いことばかりではありません。リファクタリングをしたいときに影響範囲のため特定するのに時間がかかります。

それに引き換え、無名関数の限定的な範囲であれば影響範囲を安易に特定できるメリットがあります。

他にも、1箇所しか使用しないのに名前を一生懸命考えるより付けないですむのであればその分時間が節約されますし、関数名の衝突の心配をする必要がありません。

システム開発中に発生する「関数の命名をする」ということにはこちらの質問にあるように多くのひとが時間や労力を奪われてきています。それを少しでも軽減するために使える場所では無名関数を用いましょう。

最後に

本稿では、PHPの言葉の定義について現場エンジニアの見解を含め解説しました。

これらをもっと体系的に見返したい場合PHP:The Right Wayなど良い文献があります。

PHP7のリリースを控え、まだまだ変化をし続ける言語ですので基礎を見返すいい時期だと思います。

おすすめ記事

記事・ニュース一覧