PHPで利用するメソッドの動的な判別と分岐

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}()という感じで、さらにディスディスした見た目になってます。うわぁ…。