configファイルの作成
プログラミングでは設定値というものを使うことが良くあります。量が多い場合はデータベースへ格納して管理する場合も多いですが、わざわざテーブルを用意してまで格納するほどのものでなければ、ファイルに配列として定義してアクセスできる方が便利です。フレームワークではこれらをconfigファイルとして定義することで、自由に呼び出せるようになっていることがほとんどです。
PHPポケモンではDBを使わない関係上、configファイルの機能はぜひ欲しいので、どこからでも呼び出せるように実装していきます。
配列のみの定義ファイル
まず、設定ファイルの格納用としてConfigディレクトリを用意して、配列のみを定義するPHPファイルを作成します。
ポケモンではおなじみ、ジム情報をconfigファイルとして定義しましょう。
ジム情報(/Config/gym.php)
<?php
return [
// シティ・バッジ・リーダー
['Pewter', 'Boulder', 'Takeshi'], # ニビジム
['Cerulean', 'Cascade', 'Kasumi'], # ハナダジム
['Vermilion', 'Thunder', 'Machisu'], # クチバジム
['Celadon', 'Rainbow', 'Erika'], # タマムシジム
['Fuchsia', 'Soul', 'Kyou'], # セキチクジム
['Saffron', 'Marsh', 'Natsume'], # ヤマブキジム
['Cinnabar', 'Volcano', 'Katsura'], # グレンジム
['Viridian', 'Earth', 'Sakaki'], # トキワジム
];
上記のように、配列だけを定義したPHPファイルです。定義した配列は返り値となるようにreturnします。
定義した配列は読み込み後にアクセスできるよう、変数に格納する必要があります。読み込み方法はincludeを使い、その結果を変数へ代入することで、定義した配列を格納した変数を作成することができます。
$root_path = __DIR__.'/../..';
$config = include($root_path.'/Config/gym.php');
これで、$configにgym.phpに定義した配列情報を格納することができます。
グローバルで取得
変数に格納したとしても、これをどこからでも呼び出せなければ意味がありませんね。なので、そのためにグローバル関数を使います。
また、配列内の指定した要素を取得できるように、Laravelなどのフレームワークで用いられているドット記法に対応した多次元配列指定方法を採用します。
ドット記法例
$array['fruits']['apples']['aomori'];
→ fruits.apples.aomori
configグローバル(/App/Globals/ConfigGlobal.php)
<?php
// config取得用グローバル関数
function config(string $dot_key)
{
$root_path = __DIR__.'/../..';
$keys = explode('.', $dot_key);
$config = include($root_path.'/Config/'.$keys[0].'.php');
unset($keys[0]);
foreach($keys ?? [] as $key){
$config = $config[$key];
}
return $config;
}
config関数の引数として、ドット記法の多次元配列パスを受け取ります。
受け取った文字列をexplodeでドット区切りに配列へ変換し、その最初の値をファイル名として取得します。こうすることでconfigファイル分けをしても、目的の値を取得できます。ファイルを取得後は、0番キー(ファイル名)は不要になるのでunsetで取り除き、foreachで順番にキーを取り出していきます。
こうすることで、多次元配列にも対応することが可能です。もしキー指定をしていない値を取得する場合は、添え番でアクセスできます。
まとめ
いかがだったでしょうか。
今回のPHPポケモンでは、設定ファイルの作成方法と、ドット記法でのアクセス方法をご紹介しました。
PHPを学習中の方は、ぜひ参考にしてみてくださいね。