http://d.hatena.ne.jp/bobchin/20060111
tanakaにも教えてもらいましたが、DI2を使用しない場合はこんな感じになるかな?
あまりよろしいとはいえないけど・・・
セッターに初期化処理をいれてやる・・・

class Component {
    var $filename;

    function init($file)
    {
         static $isCall = false;
         if ($isCall) return;
         $isCall = true;
        // 初期化処理
    }

    function setFilename($filename)
    {
        $file = file($filename);
        $this->init($file);
    }
}