これはPHPに限らず、すべてのLL系言語(あるいはスクリプト言語)であるPerl, Ruby等々でも同じことなのですが、これらの言語は「大きなプログラム」を記述するのには確実に向いていないと思っています。
必要になったらその場でささっと書いて、二度三度利用したら捨ててしまうようなプログラムにこそ向いています。
まして、「システム」というような規模のプログラム、具体的には1万行程度を超えるようなプログラムをこれらの言語で記述するのは異常とも言えます。
なぜでしょうか?
これらの言語で記述されたプログラムは、「プログラムで操作」するのが非常に難しいからです。いきなりややこしい話になってしまいましたが。
Spell Checkerというプログラムをご存知でしょうか。人間の記述した英文をチェックして、辞書に無い単語、つまり綴りの間違いを指摘してくれるプログラムです。
これと同様に、人間が記述したプログラムの間違いを自動的に検出してくれるプログラムというものがあります。「コンパイラ」というものがそういうものですし、最近ではIDE(平たく言えばエディタです)にもそういった機能が搭載されています。
これらのプログラムは、人間がプログラムを書くと、その間違いをその場で指摘してくれたりします。これは大助かりです。
しかし、機械的に間違いを指摘できるかどうかは、対象のプログラミング言語の性質によるのです。
例えば、日常的に使われる英語について、その文法を厳格に守らなければならないと言う法律を作ったらどうでしょうか?Spell Checkerは単語だけでなく、文法の間違いまで明確に指摘してくれることでしょう。しかし、何をするにも厳格に文法を守らなければならないので、小説を書くにも、メールを書くにも堅苦しくて仕方がありません。
簡単にいえば、ブロークンでもいいとする言語がLL言語(スクリプト言語)であり、厳格でなければならないとする言語がJavaやC++といった類の言語です。もちろん、これはかなり強引な例えではありますが。
前者はブロークンですから、少ない言葉で自由自在にささっと書けます。その一方で、後者は同じ処理をするのにも面倒な手続きを長々と書かなければならないのです。
これに対して、前者は機械的な処理にかけて間違いを検出するのが難しく、後者は(もちろんすべてではありませんが)間違いを発見しやすいのです。
このように、あちらを立てればこちらが立たずという状況はどこにでもあるもので、どちらが優れているか、劣っているかなどとは言えないものです。
しかし、一点言えることは、前者のような言語は巨大なシステム、あるいは複数の人間が関わって共同作業で作成していくようなシステムにはまったく向いていません。
現代ではもはや、大きなシステムの作成においては、プログラマの能力だけでそれを遂行することは不可能です。プログラム自体を検証し、間違いを発見し、さらには修正の際のアドバイスまで機械的にしてくれるツール類が欠かせなくなっています。
機械的に処理させるには、できるだけ機械に理解できるような構造を持つ言語でなければなりません。機械はまだまだ愚かですから、それを補うのは人間の役割になってしまうのです。
さて、巷ではRubyという言語が流行しており、どういうわけかこの言語のファンは「Javaなんかより、こんなに短くプログラムが書ける。Rubyはすごいんだ!」などとしきりに宣伝しているようです。また、「Rubyは日本発の技術!」(Rubyの作者は日本人)といって、作者の出身の松江市や福岡県などでも鳴り物入りで「町おこし」に利用しようとしていましたが、こういうことを聞くと非常に不安になります。
ともあれ、適材適所という言葉通り、これらの言語は「比較的規模が大きく、長く使用され、仕様変更がたびたびある」といったプログラム作りには全く向いていません。このような目的については、ダメ言語なのです。