PHP为什么要删除$符号


PHP Why are $ signs being removed

嗨,我在PHP中使用这个函数来创建一些旋转内容(使用spintax)。但是,如果spintax包含$(美元符号),它们将在输出中删除。

    function spintext($s){
        preg_match('#'{(.+?)'}#is',$s,$m);
        if(empty($m)) return $s;
        $t = $m[1];
        if(strpos($t,'{')!==false){
            $t = substr($t, strrpos($t,'{') + 1);
        }
        $parts = explode("|", $t);
        $s = preg_replace("+'{".preg_quote($t)."'}+is", $parts[array_rand($parts)], $s, 1);
        return spintext($s);
    }
$out = spintext("Spinning a dollar sign: {$200|$400|$300}");
echo $out;

结果:

Spinning a dollar sign: 0

有人能告诉我们为什么会这样吗?此外,您能看到在哪些方面可以提高此代码的效率,以加快旋转过程并减少内存使用吗?

因为您在字符串周围使用双引号:

$out = spintext("Spinning a dollar sign: {$200|$400|$300}");

在输出字符串之前,PHP将解析并尝试用变量内容替换它们。

(此外,这个应该抛出一个错误,因为变量永远不应该以数字开头。)

您需要使用单引号(文字)

$out = spintext('Spinning a dollar sign: {$200|$400|$300}');

或逃离美元符号CCD_ 1。

$out = spintext("Spinning a dollar sign: {'$200|'$400|'$300}");