いまどきのPHPのはなし
クライアントの話を聞いているとあまりよい印象を持たれていないPHPですが、ここ数年でわりと変化しておりまして、そのあたりをざーっと書いてみようと思います。
PHPがここまで普及したのは言語仕様が優れているというよりは、多くのレンタルサーバで何もしなくても利用できるという理由だと思いますが、その後、CGIのように縮小していくわけではなく、積極的な脆弱性対応と、RoR, Javaなど他の言語のよいところを取り込んでいくことで進化を続けています。
コーディングスタンダード
PSR一択。
広く実用に耐えうるウェブアプリケーションフレームワークが登場する前は、コーディングルールがあまり存在せず、業務では自分達でルールを定義して記述していました。
ルールを定義しただけでは守られないためチェックする必要がありますが、ちょっとめんどくさいですね。
ルールがきまれば機械的にチェックできる。ということで、自動チェックツールなども利用することができます。
例:The PHP Coding Standards Fixer for PSR-1 and PSR-2
ウェブアプリケーションフレームワーク
いろいろ増えてきました。
CakePHP, CodeIgniter, FuelPHP, Silex, Laravel, Symfony, Yii, Zend Framework
殆どのフレームワークがRoRの流れを継承しており、乱暴に言うと、どのフレームワークも効率・学習コストはだいたい同じです。
フレームワーク、コーディング標準については、
なし < インハウス < プロダクト標準 < 業界標準
ということで、なるべく上位のものを導入しましょう。
ロギング
ロギングはRFC 5424のSyslog Message Severitiesに沿った規約がPSR-3で策定されており、そちらに従うのが一般的です。PHPのライブラリではMonologなどがあります。
オートロード
PHP4までは外部PHPファイルのインクルードにincludeやrequire, require_onceを利用して宣言していましたが、PHP5からはオブジェクト指向を強く意識した言語構造となり、オートローディングという仕組みがサポートされました。
IDEの進化
PhpStorm, NetBeans, Eclipse. (sublimeもいいらしいけど使ったことがない)
言語サポートはもちろん必須ですが、ソース管理との統合やリファクタリングのサポートなど、どのエディタもそれなりに使いやすいです。
構成管理
composer.
稼働環境に合わせたライブラリの導入とバージョンアップ、関連ライブラリの配置が楽。
名前空間(ネームスペース)
PHP5.3(たしか)から導入されました。
従来、すべてのクラス・ファイルはグローバル空間上に存在しており、複数のライブラリを導入した際によく衝突していましたが、解決できるようになりました。
クロージャ
賛否両論ありましたが導入されました。使いどころによっては◯だけど、なくても別にいいと思う。
トレイト
PHP5.4で導入された機能で、クラスのミックスインができるようになりました。
ユニットテスト
PHPUnit+JenkinsとかTravisCIとか。
こちらはかなり昔からありました。
デプロイ
PHPloy, ROCKETEERなど、使いやすいライブラリがあります。
CI
PHPCI, Jenkins, Travis CI, Bambooなど。
finally
try~cacheにfinallyがない(!)という致命的な言語仕様でしたが、PHP5.5でfinallyが導入されました。よかった。
パフォーマンス
遅い!と言われてきたPHPですが、バージョンアップを重ねる度にパフォーマンスが向上しています。
また、中間キャッシュの導入がわりと一般的になっていましたが、PHP5.4からOPcacheが標準で内包されるようになりました。
Throwable
PHP7から、内部エラーが例外に置き換えられました。
呼び出し側で持ち回せるようになったため、フレームワークとの相性がよくなりました。