ハマログ

株式会社イーツー・インフォの社員ブログ

いまどきのPHPのはなし

クライアントの話を聞いているとあまりよい印象を持たれていないPHPですが、ここ数年でわりと変化しておりまして、そのあたりをざーっと書いてみようと思います。

PHPがここまで普及したのは言語仕様が優れているというよりは、多くのレンタルサーバで何もしなくても利用できるという理由だと思いますが、その後、CGIのように縮小していくわけではなく、積極的な脆弱性対応と、RoR, Javaなど他の言語のよいところを取り込んでいくことで進化を続けています。

コーディングスタンダード

PSR一択。
広く実用に耐えうるウェブアプリケーションフレームワークが登場する前は、コーディングルールがあまり存在せず、業務では自分達でルールを定義して記述していました。
ルールを定義しただけでは守られないためチェックする必要がありますが、ちょっとめんどくさいですね。

ルールがきまれば機械的にチェックできる。ということで、自動チェックツールなども利用することができます。
例:The PHP Coding Standards Fixer for PSR-1 and PSR-2

20160320 143654

ウェブアプリケーションフレームワーク

いろいろ増えてきました。
CakePHP, CodeIgniter, FuelPHP, Silex, Laravel, Symfony, Yii, Zend Framework
殆どのフレームワークがRoRの流れを継承しており、乱暴に言うと、どのフレームワークも効率・学習コストはだいたい同じです。

フレームワーク、コーディング標準については、
なし < インハウス < プロダクト標準 < 業界標準
ということで、なるべく上位のものを導入しましょう。

20160320 143938

20160320 143832

20160320 143800

ロギング

ロギングはRFC 5424のSyslog Message Severitiesに沿った規約がPSR-3で策定されており、そちらに従うのが一般的です。PHPのライブラリではMonologなどがあります。

オートロード

PHP4までは外部PHPファイルのインクルードにincludeやrequire, require_onceを利用して宣言していましたが、PHP5からはオブジェクト指向を強く意識した言語構造となり、オートローディングという仕組みがサポートされました。

PSRではPSR-0および、PSR-4で策定されています。

IDEの進化

PhpStorm, NetBeans, Eclipse. (sublimeもいいらしいけど使ったことがない)
言語サポートはもちろん必須ですが、ソース管理との統合やリファクタリングのサポートなど、どのエディタもそれなりに使いやすいです。

20160320 144344

20160320 144403

構成管理

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から、内部エラーが例外に置き換えられました。
呼び出し側で持ち回せるようになったため、フレームワークとの相性がよくなりました。

PHPPHP7コーディング標準フレームワークライブラリ言語仕様

  kaneko tomo   2016年3月20日


関連記事

日本語名を含む redmine wikiページをpdf で一括でdownloadするshell

前回のポスト redmine wiki の pdf を shell で down…

Laravelのキューイングを実装する

はじめに Laravel5で、とあるサービスの並行して走る複数のジョブをComm…

PHPでChatworkに自動投稿する

イーツー・インフォでは、社内コミュニケーションツールとしてChatworkを利用…


← 前の投稿

次の投稿 →