(カスタム拡張関数を使用せずに)後で補間するために文字列を「準備」する方法はありますか?
例えば:
class Test {
private static $STR_VAL = "the val is $v";
public static function printVal($v) {
echo self::$STR_VAL;
}
}
(カスタム拡張関数を使用せずに)後で補間するために文字列を「準備」する方法はありますか?
例えば:
class Test {
private static $STR_VAL = "the val is $v";
public static function printVal($v) {
echo self::$STR_VAL;
}
}
class Test {
private static $STR_VAL = "the val is %s";
public static function printVal($v) {
echo sprintf(self::$STR_VAL, $v);
}
}
実際の変数補間を保持したい場合の解決策:
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()の使用はコード インジェクションの可能性があることに注意してください。