Help us understand the problem. What is going on with this article?

PHPでconfigファイルをオートロードで呼び出す方法

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

これでおっけい!

satorunooshie
経済学を学んでいる大学三年生です PHP, Kotlinを中心に学習しています 役に立てそうな英語の記事や詰まったところを共有していきます
https://satorunooshie.net
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away