-1

未定義の変数を持つ文字列を処理できるクラスを作成しようとしています。これは可能ですか?またはより良い方法はありますか?

たとえば、私が次のものを持っていて、このクラス Looper がそれを変数と共に出力して出力するように$str_1$fnameたい場合、.$lname$str_2$fname$lname

class Looper {
    public function processLoop($str){
        $s='';
        $i=0;
        while ($i < 4){
            $fname = 'f' . $i;
            $lname = 'l' . $i;

            $s .= $str . '<br />';
            $i++;
        }
        return $s;
    }
}

$str_1 = "First Name: $fname, Last Name: $lname";
$rl = new Looper;
print $rl->processLoop($str_1);

$str_2 = "Lorem Ipsum $fname $lname is simply dummy text of the printing and typesetting industry";
print $rl->processLoop($str_2);
4

1 に答える 1

2

なぜ使用しないのですかstrtr

$str_1 = "First Name: %fname%, Last Name: %lname%";
echo strtr($str_1, array('%fname%' => $fname, '%lname%' => $lname));

したがって、クラスが次の場合のコンテキストで:

public function processLoop($str){
    $s='';
    $i=0;
    while ($i < 4){
        $tokens = array('%fname%' => 'f' . $i, '%lname%' => 'l' . $i);
        $s .= strtr($str, $tokens) . '<br />';
        $i++;
    }
    return $s;
}

同様に、名前付きプレースホルダーに依存したくない場合は、次の方法で位置プレースホルダーを使用できますsprintf

public function processLoop($str){
    $s='';
    $i=0;
    while ($i < 4){
        $s .= sprintf($str, 'f' . $i, l' . $i) . '<br />';
        $i++;
    }
    return $s;
}

その場合、あなたの$str議論は次のようになります"First Name: %s, Last Name: %s"

したがって、すべての使用法について:

// with strtr

$str_1 = "First Name: %fname%, Last Name: %lname%";
$rl = new Looper;
print $rl->processLoop($str_1);


// with sprintf

$str_1 = "First Name: %s, Last Name: %s";
$rl = new Looper;
print $rl->processLoop($str_1);
于 2013-01-01T02:25:30.030 に答える