メニュー

ドキュメント

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>