0

関数の引数をその番号で返すメソッドを書いています。

protected function parseArgs($str, $args)
{
    return preg_replace('|#(\d)|e', '$args[\\1 - 1]', $str);
}

$str - '#N' を含む文字列 (N は引数の数) $args - 引数の配列

したがって、「#1」と書くと、最初の引数である $arg[0] が返されます。文字列引数、整数で機能します...ただし、オブジェクトを引数として使用しないでください。文字列を返しますObject。この関数でオブジェクトを取得するにはどうすればよいですか?

4

2 に答える 2

2

preg_replace 常に文字列を返すため、そのように機能させることはできません。実際、このバージョンでは、他のすべての非文字列値の型を保持することもできません。つまり、 afterが呼び出された後、 egとas 値をparseArgs区別できません。nullfalse''

とはいえ、とにかくこの関数の目的は何ですか? なぜこれを書くのか

$args = ('foo', 'bar');
$value = parseArgs('#1', $args);

これの代わりに?

$args = ('foo', 'bar');
$value = $args[0];
于 2013-02-18T14:23:19.710 に答える
0

e修飾子は非推奨です。その使用はお勧めできません。

代わりにpreg_replace_callback() function、正規表現の置換から PHP コードを呼び出すこともできますが、e修飾子に具体化された不適切な慣行はありません。

元のサンプルコードは次のことを試みていました:

return preg_replace('|#(\d)|e', '$args[\\1 - 1]', $str);
  • 数字が続くハッシュを含む文字列で始まります
  • $args数字より 1 小さい番号の配列要素の内容を取得します。
  • 文字列内の数字を要素の内容に置き換え$argsます。

@Jonが言ったように、これは正規表現の置換を使用できる最も便利なことではありませんが、それを行う必要がある場合は、次を使用して、より良いコーディングプラクティスで簡単に行うことができますpreg_replace_callback():

preg_replace_callback(
    '|#(\d)|',
    function($matches) use($args) {return $args[$matches[1]-1];},
    $str
);

ここでの利点は、置換コードの柔軟性が大幅に向上したことです。

それが役立つことを願っています。(読みやすいように複数行に分けています)

上記のコードは、PHP 5.3 以降を使用していることを前提としています。create_function()以前のバージョンを使用している場合は、インライン関数ではなく使用する必要があります。

私は質問に直接答えていないことを知っていますが、@Jon はすでにその側面に対処しているので問題ありません。しかし、これがより良いコードへとあなたを導くことを願っています。

于 2013-02-18T14:40:48.270 に答える