読者です 読者をやめる 読者になる 読者になる

やったーphpで動く俺俺DIコンテナできたよー\(^o^)/その1

コンストラクタインジェクション、セッターインジェクション、メソッドインジェクションに対応。
ただし、メソッドの引数はひとつだけしか指定できません(途中で飽きたので)。

sample.php

<?php
include( 'Ore2DIContainer.php');

$xmlstr = '
<objects>
    <object name="player" class="HumanPlayer">
        <property name="human">$human</property>
        
        <object name="human" class="Human">
            <arg>"Tarou Yamada"</arg>
            <arg>21</arg>
        </object>
    </object>
</objects>
';

class Human
{
    public $name;
    public $age;
    public function __construct( $name, $age)
    {
        $this->name = $name;
        $this->age = $age;
    }
}

class HumanPlayer
{
    public $human;
    public function play()
    {
        echo 'My name is ' . $this->human->name . '.' . PHP_EOL;
        echo 'Im ' . $this->human->age . '.' . PHP_EOL;
    }
}

$dicon =& Ore2DIContainer::singleton( $xmlstr);

$dicon->getObject( 'player')->play();

上記のコードの実行結果

My name is Tarou Yamada.
Im 21.