我正在使用 PHP 7.2.12
我从Type Casting section of PHP Manual遇到以下声明:
在PHP 5.2.1中添加了(二进制)强制转换和b前缀正向支持。 请注意,(二进制)强制转换与(字符串)相同,但它必须 不应该依赖。
我对上述文字不完全理解。有人请向我解释清楚。
我在同一页上研究了PHP手册中给出的以下代码示例:
<?php
$binary = (binary) $string;
var_dump($binary);
$binary = b"binary string";
var_dump($binary);
?>
输出:
Notice: Undefined variable: string in ..... on line 2
string(0) ""
string(13) "binary string"
如果您查看上面的输出,即使将其转换为二进制后,我也会得到相同的字符串。那么,二进制转换实际上执行什么转换工作?
为什么不应该依赖二进制转换?
还要向我说明可以执行哪种类型的二进制转换?我的意思是合法的。
PHP手册的任何地方都没有这方面的解释或理由。
请有人指导我正确的方向来帮助我。
答案 0 :(得分:5)
PHP的Big Plans™ for PHP 6字符串最终将变成Unicode字符串。为了说明这意味着什么,当前的PHP行为:
$str = '漢字';
echo $str[0];
// ?
在PHP 6中,这将输出"漢"
而不是损坏的?
。换句话说,字符串是编码和字符识别的,而不是哑字节数组。 (要在当前的PHP版本中输出"漢"
,您需要类似mb_substr($str, 0, 1, 'UTF-8')
的东西。)
要保留旧的哑字节数组行为,可以在字符串前面加上b'漢字'
,然后可以使用(binary)
将Unicode字符串强制转换为哑字节数组。所有这些都已为PHP 6添加到PHP 5 准备中,因此您可以提前开始更新代码。
好吧,除了PHP 6 never happened和b''
前缀和(binary)
强制类型转换至今,仍然没有任何作用。