4

(カスタム拡張関数を使用せずに)後で補間するために文字列を「準備」する方法はありますか?
例えば:

class Test {
    private static $STR_VAL = "the val is $v";

    public static function printVal($v) {
        echo self::$STR_VAL;
    }
}
4

2 に答える 2

8

sprintf()

class Test {
    private static $STR_VAL = "the val is %s";

    public static function printVal($v) {
        echo sprintf(self::$STR_VAL, $v);
    }
}
于 2012-07-06T09:44:24.697 に答える
0

実際の変数補間を保持したい場合の解決策:

function interpolate_string($string, $vars) {
    extract($vars);
    return eval('return "' . addslashes($string) . '";');
}

class Test {
    //Note the single quote to prevent interpolation here
    private static $STR_VAL = 'the val is $v'; 

    public static function printVal($v) {
        echo interpolate_string(self::$STR_VAL, compact('v'));
    }
}

この特定のコードには明らかな攻撃は見られませんが、信頼できない文字列を処理する場合、 eval()の使用はコード インジェクションの可能性があることに注意してください。

于 2018-01-10T22:02:04.390 に答える