在此示例中,为什么我的输出321_content
?不应该是_contenet
吗?环路是否会在每次迭代时覆盖$string
变量,在应用4_content
后substr
和_content
之前留下substr
?
<?php
$string = "_content";
for ($x=1; $x<5; $x++){
$string = $x . $string;
}
$string = substr($string,1);
echo $string;
答案 0 :(得分:1)
是的,你覆盖$ string,但新值也包含$ string。 $ string的新值变为$ x加上字符串的前一个值。因此,在每次迭代时,会增加一个额外的数字。
它与处理此代码的顺序有关。在这样的赋值中,首先计算表达式的结果(在这种情况下为$x . $string
)。之后,表达式的结果再次分配给变量$ string。
因此,在第一次迭代之后,$ string变为'1_content',然后变为'21_content',依此类推。
只有将分配放入另一个变量时,才会得到预期的结果:
<?php
$postfix = "_content";
for ($x=1; $x<5; $x++){
$string = $x . $postfix;
}
echo $string;
在此代码中,每次迭代时,$ string都会从$ x和$ postfix中获取一个值。在每次迭代时,该值都会被覆盖。 $ postfix保持不变,每次迭代都会覆盖$ string,所以现在最后,$ string包含'4_content'而不是'4321_content'。