Laravelをやっているとconfigから値を呼ぶことがあります。
同様に素のPHPでも使いたいなと思ったのでやり方を書いておきます
Config.php
<?php
class Config {
protected static $directory;
public static function setConfigDirectory($directory) {
self::$directory = $directory;
}
public static function getConfigDirectory() {
return rtrim(self::$directory, '/\\');
}
public static function get($s) {
$values = preg_split('/\./', $s, -1, PREG_SPLIT_NO_EMPTY);
$key = array_pop($values);
$file = 'common.php';
$path = (!empty($values)) ? implode(DIRECTORY_SEPARATOR, $values) .
DIRECTORY_SEPARATOR : '';
$base_dir = self::getConfigDirectory() . DIRECTORY_SEPARATOR;
$config = include($base_dir . $path . $file);
return $config[$key];
}
}
これの他にconfig/common.php
を作ってください
common.php
<?php
return [
'STRIPEKEY' => 'abc',
'ZOOMKEY' => '123',
];
読み込みたいファイルで
example.php
<?php
require_once 'Config.php';
Config::setConfigDirectory(__DIR__ . '/config');
これを追記してください
蛇足ですが、require
, include
の違いは
ファイルが読み込めなかった場合
require文の場合はFatalエラーで処理が終了するが
include文の場合はWarnigエラーで処理が継続されることです
require_once, include_onceの違いは
同じファイルを読み込んだ場合に
_once文は一度しかファイルを読み込まないが
require, include文は何度でも読み込むことです
つまりほとんどの場合はrequire_onceでいいですね
gitにpushするときは
.gitignore
config/
Config.php #任意
を追記すればいいでしょう
example.php
<?php
require_once 'Config.php';
Config::setConfigDirectory(__DIR__ . '/config');
echo Config::get('STRIPEKEY'); //abc
echo Config::get('ZOOMKEY'); //123
読み込むのがめんどくさいときはオートロードしましょう
オートロードはクラスを利用する際に自動的にそのクラスが定義されているファイルを読み込む機能です
処理上のオーバーヘッドを防ぐために使うといいですね!
spl_autoload_register()
関数を使う
オートロードの処理をコールバック関数として任意のタイミングで登録できて
__autoload()
関数と違って複数のオートロード関数を登録しておくこともできる
lib/autoload.php
<?php
spl_autoload_register(
function($class_name)
{
$filepath = __DIR__ . '/' . $class_name . '.php';
if (is_readable($filepath)) require $filepath;
if ($class_name == 'Config') Config::setConfigDirectory(__DIR__ . '/config');
}
);
#複数作ると必要なクラスの定義が見つかるまで登録した順にコールバック関数が実行される
それを読み込もう
example.php
<?php
require 'lib/autoload.php';
echo Config::get('ZOOMKEY'); //123
これでおっけい!