PHPで利用するメソッドの動的な判別と分岐
Posted: Updated:
PHPでJavaScriptのように動的にメソッドを判別&指定
JavaScriptのように、と言うと語弊がありますが、書き方とノリにJavaScriptの影響が出た感じするな〜と、おもったのでなんとなくメモ。
あるメソッドが使えるならこっち、使えないならこっち、っていう感じ。
$xml = new \XMLReader();
// libxmlが入っていて、
// readOuterXmlメソッドが利用できるなら、
// _getObjectFromXmlString関数を使う
$readIter = method_exists($xml, 'readOuterXml')
? '_getObjectFromXmlString'
: '_getObjectFromDomElement';
function _getObjectFromXmlString($reader)
{
$xml = $reader->readOuterXml();
return simplexml_load_string($xml);
}
function _getObjectFromDomElement($reader)
{
$node = $reader->expand();
$dom = new \DomDocument();
$dom->formatOutput = true;
$assocNode = $dom->importNode($node, true);
$rv = simplexml_import_dom($assocNode);
return $rv;
}
// …適当にポインタを移動させて…
// ここで判別結果を使ってメソッド呼び出し
while ($reader->{$readIter}()) {
// …もごもご…
}
デフォルメしたサンプルに落とし込んでいますが、実コードでは$this->{$this->readIter}()
という感じで、さらにディスディスした見た目になってます。うわぁ…。