Factory コンポーネント

Lambda/components/Factory.php

Factory コンポーネントは、2つの機能を提供します。

  1. ライブラリのロード
  2. ライブラリのロード + インスタンスの生成
 

Factory コンポーネントを利用すると、

require_once '/path/to/Klass.php';
$klass = new Klass;
$result = $klass->execute();

上記を次のように1行で記述することができます。

$result = Factory::load('Klass')->getInstance()->execute();

次のように書いてもOKです。

$klass = Factory::load('Klass')->getInstance();
$result = $klass->execute();

ライブラリをメソッドチェーンに対応するように実装しておけば、以下のように記述できます。

Factory::load('Klass')->getInstance()->execute()->getResult()->finish()
 

では、詳しい使い方を説明していきます。

まず最初に、Factory::setBaseDir メソッドで、ロードするライブラリを探索するディレクトリを指定します。

Factory::setBaseDir('/Lambda/libs');

※ このメソッドを呼ばない場合、暗黙のうちに Factory.php が置かれているディレクトリが設定されます。

lmd では、Lambda.init.php 内で、Factory::setBaseDir メソッドを呼んでいます。
 

これ以降、ベースディレクトリに「/Lambda/libs」が指定されたものとして説明していきます。

 

/Lambda/libs/some_class.php をロードして、インスタンスを生成する

$obj = Factory::load('some_class')->getInstance(); // 拡張子 .php は不要
 

/Lambda/libs/hoge/some_class.php をロードして、シングルトンインスタンスを生成する

$obj = Factory::load('hoge/some_class')->getSingleton();
 

/Lambda/libs/some_class.php をロードして、クラス名「className」のインスタンスを生成する

$obj = Factory::load('some_class', 'className')->getInstance();

※ ファイル名とクラス名が異なる場合、Factory::load() メソッドの第二引数を指定します。

 

/Lambda/libs/hoge/some_class.php をロードして、コンストラクタ引数を渡してインスタンスを生成する

$obj = Factory::load('some_class')->getInstance($arg1, $arg2, ...);

※ コンストラクタに引数を渡す場合はこのように記述します。

 

/root/dir/some_class.php をロードして、インスタンスを生成する

$obj = Factory::load('/root/dir/some_class')->getInstance();

※ スラッシュから始まるパスを指定すると setBaseDir() で設定したディレクトリを無視します。

 

ロードだけ行いたい場合 ( = require)

Factory::import('some_class');

上は下記と同等です。

require '/Lambda/libs/some_class.php';