PHP式について
PHP式とは、Seasar2のdiconファイルに記述するPHPソースを指します。
diconファイルの<property>要素の他,
<component>要素・<initMethod>要素・<destroyMethod>要素・<arg>要素・
<meta>要素・<aspect>要素にPHP式を記述することができます。
本説明に用いるdiconファイルを使用したサンプルは、s2container.php5/examples/dicon/expression にあります。
arg、property、aspect、metaタグ
コンストラクタ引数やプロパティに設定したい値を返すPHP式を記述します。
<?xml version="1.0" encoding="Shift_JIS"?> <!DOCTYPE components PUBLIC "-//SEASAR2.1//DTD S2Container//EN" "http://www.seasar.org/dtd/components21.dtd"> <components> <component name="sample1" class="ArgExp"> <arg>10</arg> <property name="message"> file_get_contents(EXAMPLE_DIR . '/dicon/expression/ArgSample.txt') </property> </component> <component name="sample2" class="ArgExp"> <arg>2+3</arg> <property name="message"><![CDATA[ $msg1 = "Hello "; $msg2 = "World"; return $msg1 . $msg2; ]]></property> </component> </components>PHP式が return を含まない場合は、自動的に return が付加されます。コンポーネント sample1 では、
コンストラクタ引数は以下の式がeval関数で処理されます。
return 10;messageプロパティは以下の式がeval関数で処理されます。
return file_get_contents(EXAMPLE_DIR . '/dicon/expression/ArgSample.txt');aspectタグやmetaタグにも同様にPHP式を記述できます。
componentタグ
オブジェクトを返すPHP式を記述します。
<?xml version="1.0" encoding="Shift_JIS"?> <!DOCTYPE components PUBLIC "-//SEASAR2.1//DTD S2Container//EN" "http://www.seasar.org/dtd/components21.dtd"> <components> <component name="hello"> new ComponentExp("Hello") <property name="messageB">"World"</property> </component> <component name="hello2" class="ComponentExp"> hello3 </component> <component name="hello3" class="ComponentExp"/> </components>componentタグのクラス属性が指定されている場合は、PHP式で返されたオブジェクトと ReflectionClass#isSubclassOf 比較を行います。
initMethod、destroyMethodタグ
コンポーネントの初期化、終了時の処理をPHP式で記述します。$component変数により自身を参照できます。
<?xml version="1.0" encoding="Shift_JIS"?> <!DOCTYPE components PUBLIC "-//SEASAR2.1//DTD S2Container//EN" "http://www.seasar.org/dtd/components21.dtd"> <components> <component name="method" class="MethodExp"> <initMethod> $component->init(10) </initMethod> </component> </components>