共通ファイルの自動読み込み設定
PHP スクリプトにおいて、複数のファイルで共通のヘッダーやフッターを読み込む場合、従来は各ファイル individually に require 文を記述する必要がありました。しかし、この方法ではファイルパスの変更時にすべてのファイル 수정が必要となり、保守性が低下します。
より効率的な方法として、php.ini または .htaccess で auto_prepend_file と auto_append_file を設定することが可能です。これにより、スクリプト実行の前後に自動的に指定ファイルをインクルードできます。
php.ini での設定
グローバル設定として php.ini を編集し、以下のディレクティブを定義します。
auto_prepend_file = "/var/www/includes/init.php"
auto_append_file = "/var/www/includes/terminate.php"
この設定後、Web サーバーを再起動すると、すべての PHP ページ実行前に init.php が、実行後に terminate.php が自動的に読み込まれます。なお、これらのディレクティブで指定できるファイルは 1 つですが、そのファイル内部でさらに複数のファイルをインクルードすることは可能です。
.htaccess によるディレクトリ限定設定
すべてのページではなく、特定のディレクトリ配下のみで自動読み込みを行いたい場合、.htaccess ファイルを使用します。これによりサーバー再起動が不要になり、権限管理も柔軟になります。
php_value auto_prepend_file "/var/www/includes/init.php"
php_value auto_append_file "/var/www/includes/terminate.php"
ただし、.htaccess を使用する場合、アクセスごとに設定が解釈されるため、パフォーマンス面で若干のオーバーヘッドが発生する点に注意が必要です。
PHP 5.4 以降の主な構文機能
PHP 5.4 以降では、開発効率を向上させるための新しい構文や機能が追加されています。
ジェネレーター関数
yield キーワードを使用することで、関数内でイテレーターを生成できます。これにより、大きな配列をメモリ上に展開せずにデータを順次生成することが可能になります。
function sequenceGenerator()
{
for ($count = 1; $count <= 5; $count++) {
yield $count;
}
}
// 戻り値は [1, 2, 3, 4, 5] として扱えます
組み込み Web サーバー
開発用途として、PHP は軽量な組み込み Web サーバーを提供しています。これは並列処理には対応していませんが、手軽に動作確認を行うのに適しています。
php -S 127.0.0.1:9000
上記コマンドを実行すると、カレントディレクトリをルートとしてサーバーが起動し、ブラウザからアクセス可能になります。ポート番号や监听 IP は任意に変更可能です。また、すべてのリクエストを特定のスクリプトに委譲するルーティング設定もサポートされています。
php -S 127.0.0.1:9000 router.php
アクセス構文の拡張
静的メソッドを動的に呼び出す際、変数を用いた構文がサポートされました。
$action = "processAction";
Handler::{$action}();
また、インスタンス生成と同時にメンバーへアクセスする記述や、関数の戻り値に対して直接配列アクセスを行う構文も利用可能になりました。
(new Repository)->fetch();
print getData()[0];
foreach における list() の利用
嵌套された配列を処理する際、foreach ループ内で list() 構文を使用して値を分解できます。
$dataset = [
[10, 20, 30],
[40, 50, 60],
];
foreach ($dataset as list($m, $n, $o)) {
echo "{$m} {$n} {$o}\n";
}
このコードを実行すると、各サブ配列の要素が変数 $m, $n, $o に割り当てられ、出力されます。