rhaco のライブラリを試してみる その2

動的にインスタンスを生成する箇所のやり方が分からなかったけど、
id:anatoo さんに、「それ ReflectionClass の newInstanceArgs で出来るよ」とコメントで教えて頂いたので、早速やってみた。


※ factory() メソッドだけ変更。

<?php
    public function factory($class, $args = null)
    {   
        // No arguments
        if (is_null($args)) {
            return new $class;
        }
        // Use ReflectionClass for arguments
        $reflectionObj = new ReflectionClass($class);
        return $reflectionObj->newInstanceArgs($args);
    } 

呼び出しもと

<?php
require_once 'My/Vendor/Rhaco.php';
$rhaco = new My_Vendor_Rhaco();
$package = array(
        'tag.model.SimpleTag',
        'network.http.Browser'
);
$page = $rhaco->setPackage($package)
                    ->factory('Browser')
                    ->get('http://d.hatena.ne.jp/heavenshell');
$page = StringUtil::encoding($page);

$simpleTag = $rhaco->factory('SimpleTag', array('', $page));
foreach ($simpleTag->getIn('h3') as $key => $val) {
    var_dump(strip_tags($val->getValue()));
}

結果

string '■[PHP][Zend Framework] rhaco のライブラリを試してみる' (length=67)
string '■[PHP] PHPUnit を使ってユニットテスト' (length=50)
string '■[Mac][PHP][Vim] Vim で PHP のマニュアルを表示する' (length=64)
string '■[雑記] 関西の OSS' (length=25)
string '■[PHP] CakePHP 勉強会' (length=26)
string '■[Mac] Safari Stand バージョンアップ' (length=46)
string '■[PHP][ニコニコ動画][Zend Framework]ニコニコ動画のお勧め動画を取得する api' (length=99)

おぉぉ!意図通りとれた! id:anatoo さん、ありがとうございます<(_ _)>


ところで rhaco の SimpleTag() のコンストラクタの第二引数には何を指定すれば良いんだろう。。。
てっきり 'h3' とかって指定したら、最初の h3 タグの中身が取れるのかなと思ったんだけど、
どうもそうでないみたい。$simpeTag を var_dump したら、ページ全体が格納されていた。


ちょっと試してみた。

引数なしで生成

<?php
$simpleTag = $rhaco->factory('SimpleTag');
$simpleTag->set($page);
var_dump($simpleTag);

結果

object(SimpleTag)[29]
  public 'name' => string 'html' (length=4)
  public 'value' => string '

<head>.....

引数を指定せずにインスタンスを生成し、set してやったら、name 属性に html と入って、html タグの中身が取得された。

第二引数に 'html' を指定して生成

<?php
$simpleTag = $rhaco->factory('SimpleTag', array('html', $page));
var_dump($simpleTag);

結果

object(SimpleTag)[33]
  public 'name' => string 'html' (length=4)
  public 'value' => string '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>.....

ページ全体が取れた。ふーむ・・・。


※ 追記
ちなみに rhaco のバージョンは 1.4.0
http://sourceforge.net/projects/rhaco/ からダウンロードした。