(二进制)强制转换实际上是做什么的,为什么不应该依赖它?

时间:2018-12-11 10:45:06

标签: php string types casting binary

我正在使用 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手册的任何地方都没有这方面的解释或理由。

请有人指导我正确的方向来帮助我。

1 个答案:

答案 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 happenedb''前缀和(binary)强制类型转换至今,仍然没有任何作用。