在这样的代码中:
<?php
$a = 'абв';
for($i = 0; $i < strlen($a); $i++)
{
echo $a[$i]>>6, ' ';
}
输出为0 0 0 0 0 0
,这不是预期的结果。预期输出值为3和2,具体取决于我们是在UTF-8字符的开头还是结尾。
什么问题?
答案 0 :(得分:2)
尽管PHP提供了许多功能,这些功能只是C对应的简单包装,但开发人员决定为位移运算符添加额外的检查。在PHP中,shift-left和shift-right总是返回0(甚至不是假,这有点意义)。
为了对一个字符进行位移,有必要用ord
函数包装它:
<?php
$a = 'абв';
for($i = 0; $i < strlen($a); $i++)
{
echo ord($a[$i])>>6, ' ';
}
这会产生:3 2 3 2 3 2
正如所料。