phpQueryとは
JavaScriptのライブラリであるjQueryをPHPで実装したもの。本家とほぼ同等の機能があり、PHPでHTML・XMLのDOMツリーの検索・操作がしやすくなる。
一部実装されていない機能もあるが、逆にjQueryにはない新規に追加された機能もある。
使い方
こちらからダウンロード。必要なファイルを1ファイルにまとめた「phpQuery-xxx-onefile.zip」がおすすめ。
もしくは、PEARでインストール。
pear channel-discover phpquery-pear.appspot.com |
pear install phpquery/phpQuery |
まずはインクルード。
require_once 'phpQuery/phpQuery.php' ; |
require_once 'phpQuery/phpQuery-onefile.php' ; |
対象となるHTML・XMLをphpQuery::newDocument系の関数で読み込む。jQueryの「jQuery(document)」と同等。
返ってくるのはphpQueryオブジェクト。
$pqDoc = phpQuery::newDocument( $htmlString ); |
以下とほぼ同等。
var jqDoc = jQuery(document); |
phpQuery::newDocument($html, $contentType = null)
HTML・XMLのContent-typeを自動判別。判別できなかった場合はUTF-8のtext/htmlとして読み込む。
newDocumentFile($file, $contentType = null)
ファイルから直接読み込んで自動判別。
phpQuery::newDocumentHTML($html, $charset = 'utf-8’)
phpQuery::newDocumentXHTML($html, $charset = 'utf-8’)
phpQuery::newDocumentXML($html, $charset = 'utf-8’)
phpQuery::newDocumentPHP($html, $contentType = null)
PHPコードを含む文書を読み込む。
phpQuery::newDocumentFileHTML($file, $charset = 'utf-8’)
phpQuery::newDocumentFileXHTML($file, $charset = 'utf-8’)
phpQuery::newDocumentFileXML($file, $charset = 'utf-8’)
phpQuery::newDocumentFilePHP($file, $contentType)
jQuery()や$()と互換性がある関数は、「pq()」。
pq($param, $context = null);
$pqObj = pq( '<div>sample</div>' ); |
$pqObj = pq( '<div>sample</div>' , $pqObj ); |
$pqObj = pq( '<div>sample</div>' , $pqObj ->getDocumentID()); |
$pqObj = pq( '<div>sample</div>' , $domNode ); |
phpQueryオブジェクトは、ArrayObjectを継承しているので配列演算子 [] でセレクタを指定。
$pqDoc = phpQuery::newDocument( $htmlString ); |
$txt = $pqDoc [ 'div span.sample' ]->text(); |
$pqDoc [ 'div img' ]->attr( 'src' , 'image.png' )->css( 'width' , '20%' ); |
jQueryオブジェクトとは異なり、phpQueryオブジェクトは関数オブジェクトではないので注意が必要だが、あとはほとんど同じ。
phpQueryオブジェクトはあくまで配列オブジェクトなので、以下のようにループを回せる。
$pqDoc = phpQuery::newDocument( $htmlString ); |
foreach ( $pqDoc as $domNode ) { |
pq( $domNode )->find( 'div' ); |
#each()も、もちろんある。
$pqDoc = phpQuery::newDocument( $htmlString ); |
function callback( $domNode ) { |
$html = pq( $domNode )->html(); |
いずれもjQueryと同じく、phpQueryオブジェクトではなく標準のDOMNodeオブジェクトが返ってくる。
手軽にプラグインをつくる機構も用意されている。
提供されているプラグインの中には、JSONを扱うための「JSON Plugin」もある。
$jsonString = phpQuery::toJSON( pq( 'form' )->serializeArray() ); |
$array = phpQuery::parseJSON( '{"foo": "bar"}' ); |