2014年12月4日木曜日

マルチリンガルになりたい!③ PHP編

お久しぶりです。本田です。

本格的に冬らしく、寒くなってきましたね。
鼻炎持ちの私にとっては冬は非常に辛い季節です・・・。
今日も大量のティッシュを消費しながら、このブログを書いています。

それはさておき、「マルチリンガルになりたい」第三回は「PHP」について触れてみたいと思います。



■ 私にとってのPHP

このPHPという言語、個人的に非常に思い入れの深い言語です。理由は単純で、私がプログラミングで初めてお金を貰った言語だからです。

思い起こせば9年半前、大学2年のころ(年がバレる!)ベンチャー企業でWebプログラマのアルバイトを始めた時に出会ったのがPHPでした。当時はPerl+CGIでのWebプログラミングはやったことがありましたが、PHPを使ってあまりの書きやすさに驚いたものです。

以降、アフィリエイトフレームワークやショッピングサイト、動画配信サイトや独自のMVCフレームワークなど様々な物をPHPで作ってきました。今の職場ではほとんど使っていませんが、それでも未だに一番コードを書いた言語なのではないでしょうか。そろそろJavaに抜かれそうですが。

■ とりあえずビールWikipedia

自分語りは置いといて、いつも通りWikipedia先生にPHPの事を訊いてみましょう。
PHP: Hypertext Preprocessor(ピー・エイチ・ピー ハイパーテキスト プリプロセッサー)とは、動的にHTMLデータを生成することによって、動的なウェブページを実現することを主な目的としたプログラミング言語、およびその言語処理系である。
「動的なウェブページを実現することを主な目的とした」という所がポイントですね。
Java、Perl、Rubyなど、Webプログラミングに利用される他の言語の殆どは別の目的のために作られている事が多いです。
Webプログラミングのために創られた言語というのは、私の知っている様なメジャーな言語の中ではPHPが初めてだと思います。

余談ですが、PHPって"Personal Home Page"が由来なんですね。初めて知りました。
てっきり"Processer for HyPertext"みたいな感じかと思ってました。

■ ここが楽だよPHP

PHP、とにかく楽な言語なのは確かです。ざっと挙げると

  • インストールからWebプログラムを動かすまでの手順が比較的簡単
  • JSPのような宣言部すら必要とせず、HTMLの中にスクリプトレットを埋め込むだけで使える
  • 言語仕様はCやJavaに近く、癖がない
  • 強い動的型付け
  • 連想配列がとにかく手軽に使える
  • リクエストパラメータやセッションパラメータの取得が簡単(配列に勝手に入れられてる)
  • Web開発用途としては十分な量の基本ライブラリ群
  • メジャーなデータベースの接続モジュールが公式で提供されている
  • リフレクションっぽいことが異常なほど簡単に行える(後述)

1分で思い浮かぶだけでこれだけあります。1時間考えたらあと3倍ぐらい出そうな気がします。

最後の一つだけ判りにくかったと思うのですが、例えば次のようなことができます。
<?php
$varname = "foo";
$$varname = "test";

echo $foo;       // "test"と表示される
?>
上記は変数名の例ですが、クラス名や関数名なども同じように簡単に変数から取得して利用可能です。楽ちん!

■ ここがマズいよPHP

まあ、人によっては気付いたと思いますが、PHPの楽な点の殆どはデメリットにもなります。
「強力な機能+簡単」までは良いですが、そこに「不勉強」とか「初心者」を加えると、いとも簡単にセキュアとは程遠いシステムが誕生します。

その楽ちんっぷりから一時期は初心者向けなんて言われていたPHPですが、個人的には基礎をきちんと理解した上級者向けな言語だと思っています。

あとは、プログラム言語としてはよろしくない点がたくさんあります。
特にオブジェクト指向周りの言語仕様があやしいことになってます。
これはPHP4からPHP5にバージョンアップした際、オブジェクト指向系の構文を大きく見直したことに起因します。
PHP4の書きかた
<?php
class Hoge {
    var $member;

    function Hoge($init) {
        $this->member = $init;
    }

    function showMember() {
        echo $member;
    }
}
?>

PHP5の書きかた
<?php
class Hoge {
    private $member;

    public function __construct($init) {
        $this->member = $init;
    }

    public function showMember() {
        echo $member;
    }
}
?>
あ、ちなみにPHP4にはメンバのアクセス権とか、静的メンバなんて概念はありません。

問題なのは下位互換性のためにPHP5でもPHP4の構文が使えるってところでしょうか。
酷いフレームワークだと構文が混在しててすごいことになっていたりします。

他にもmagic_quotes_gpcっていう悪名高い設定値があったり、substrとstr_replaceなんて関数名が同居していたりと微妙な点はそれなりにある言語かと思います。

■ PHPを見直す

問題点も山盛りなPHPですが、一時期の「PHPはWebプログラム初心者用言語」みたいな風潮が少しずつ薄れてきたのと、CakePHPなどのフレームワークが随分と成長したのもあって、最近はかなりまともな印象になったと思います。

PHP自身も進化している様です。私が主に使っていたのはPHP5.0~5.2でしたが、最新のPHP5.5までの間に

  • 名前空間
  • クロージャ
  • 例外のfinally
  • ガーベジコレクションの改良
  • ジェネレータ
など、便利な要素が追加されてきているようです。ただ、その中にあの

  • goto

があるあたりがPHPらしいというかなんというか。


まあ、言語仕様には色々と問題はありますが、PHPはWebプログラムを手軽に、簡単に作る上ではこの上なく便利な道具だと思います。
スタンドアロンよりもWebプログラムが増えている昨今、私にとってPHPはまだまだ永く付き合っていく相棒になると考えています。

0 件のコメント:

コメントを投稿