浜松のWEBシステム開発・スマートフォンアプリ開発・RTK-GNSS関連の開発はお任せください
株式会社シーポイントラボ
TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:静岡県浜松市中区富塚町1933-1 佐鳴湖パークタウンサウス2F

【PHP】お手製ローディング付きライブラリを取り込む

 PHPのコードで環境準備が最もいらない(最もどのような環境でも動く)ローディング方法は手書きでrequire, includeをファイルに直接記述することです。そうするとあるrequirem, includeで指定したディレクトリにコードを置く、あるいはPHPがファイルを探すディレクトリのリストのパスを通すと、各ファイルが各ファイルを適切に読みあいます。この記事ではこの手のお手製ローディング付きライブラリをソースコード内で完結して呼び出す方法を紹介します。
 これはこれで便利ですが困ったことにオートローダの仕組みを度外視しており、オートロードがある環境でオートローダの示すやり方に則ろうとするとどうにもうまくいきません。
【PHP】Composerのautoload機能 – 株式会社シーポイントラボ | 浜松のシステム・RTK-GNSS開発
 この様な場合、無理にオートローダに読み込ませようとせず、当初想定されていたinclude、require状態を再現するとよいです。
 使うのはPHPのオプションをPHP内部で設定する関数群の一つ set_include_path です。
PHP: set_include_path – Manual
 これを使うとPHPの設定のinclude_path(ファイルを探すディレクトリパスののリスト)の指定ができます。
PHP: コア php.ini ディレクティブに関する説明 – Manual
 実際のコードは次になります。例によってLaravelで初期読み込みをするAppServiceProvider内に読み込み処理を書きました。

class AppServiceProvider extends ServiceProvider
{
    /**
     * Register any application services.
     *
     * @return void
     */
    public function register(): void
    {
        // OSに依存しないセパレータ定数DIRECTORY_SEPARATORで各文字列を結合することでOSに依存しないパスを表現
        $path = implode(DIRECTORY_SEPARATOR, [base_path(), 'vendor_packages', 'HOGE', 'client', 'src']);
        // get_include_path()で元のinclude_pathを取得、OSに依存しないセパレータであるPATH_SEPARATOR定数で追加のパスとつなぐ
        set_include_path(get_include_path() . PATH_SEPARATOR . $path);
    }
}

 こうするとお手製ローディングのコードでも無理なく、記述をやたら増やすこともなく取り込めます。

  • この記事いいね! (0)