お知らせ

現在サイトのリニューアル作業中のため、全体的にページの表示が乱れています。
投稿日:
言語::PHP

PHPでClassをrequireせずに使えるやつ
Laravelのrequest()とかがどうやって呼ばれてるのかを調べていくうちに辿り着いたのでメモがてら

Classは簡単に読み込めるけど、Functionは一筋縄ではいかなさそう
ついでにClassに好き勝手プロパティ増やせることも発見した

autoloaderを実装

spl_autoload_registerを使う。Laravelはcomposerが上手いことやってくれてるっぽかった

<?
function regist() {
    spl_autoload_register(function() {
        require './Hoge.php';
        require './Piyo.php';
    });
}

使いたいクラス

適当に用意

<?
class Hoge {
    public $hoge;
}
<?
class Piyo {
    public $piyo;
}

autoloaderを呼んで使う

ついでに好き勝手にプロパティも生やす

<?
require './bootstrap.php';
// ここでクラスをautoloadする
regist();

// どこからも呼んでないけど
$h = new Hoge;
// 生やせる
$h->fuga = "aaa";
$h->hogepiyo = "bbb";

// 使える
$p = new Piyo;
$p->fuga = "aaa";
$p->hogepiyo = "bbb";

var_dump($h, $p);

/*
結果

class Hoge#2 (3) {
  public $hoge =>
  NULL
  public $fuga =>
  string(3) "aaa"
  public $hogepiyo =>
  string(3) "bbb"
}

class Piyo#3 (3) {
  public $piyo =>
  NULL
  public $fuga =>
  string(3) "aaa"
  public $hogepiyo =>
  string(3) "bbb"
}

*/
投稿日:
言語::PHP

手順

  1. composer initでプロジェクトを作成
  2. composer require [パッケージ名]でパッケージを入れる
  3. 名前空間を作る場合、 composer.jspnに以下のセクションを作成
    1. リファレンス: getcomposer.org
"autoload": {
    "psr-4": {
        "App\\": "src/App" // 名前空間と対応するパス
    },
    "classmap": [
        "src/App" // クラスを読み込むディレクトリのルート
    ]
}
  1. autoloadclass_aliasなどを設定するbootstrap.phpを適当に作成
    1. このbootstrap.phpはエントリポイントからrequire_onceなどで読み込無事で有効化する
  2. phpunitを組み込む場合
    1. composer require --dev phpunit/phpunitでインストール
    2. composer.jsonに以下のセクションを作成
    "scripts": {
        "test": [
            "phpunit --bootstrap bootstrap.php test"
        ]
    }