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

PHP*_*Nut 0 php string binary types casting

我正在使用PHP 7.2.12

我在PHP手册Type Casting部分遇到了以下声明:

PHP 5.2.1中添加了(二进制)强制转换和b前缀正向支持。请注意,(二进制)强制转换与(字符串)相同,但不可依赖。

我对上述文字不完全理解。有人请向我解释清楚。

我在同一页上研究了PHP手册中给出的以下代码示例:

<?php
$binary = (binary) $string;
var_dump($binary);
$binary = b"binary string";
var_dump($binary);
?>
Run Code Online (Sandbox Code Playgroud)

输出:

Notice: Undefined variable: string in ..... on line 2
string(0) ""
string(13) "binary string"
Run Code Online (Sandbox Code Playgroud)

如果您查看上面的输出,即使将其转换为二进制后,我也会得到相同的字符串。那么,二进制转换实际执行什么转换工作?

为什么不应该依赖二进制转换?

另外,请向我说明可以执行哪种类型的二进制转换?我的意思是合法的。

在PHP手册中,没有关于这方面的任何解释或理由。

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

dec*_*eze 5

PHP拥有适用于PHP 6的Big Plans™,其中字符串最终将变成Unicode字符串。为了说明这意味着什么,当前的PHP行为:

$str = '??';
echo $str[0];
// ?
Run Code Online (Sandbox Code Playgroud)

在PHP 6中,这将输出"?"而不是break ?。换句话说,字符串是编码和字符识别的,而不是哑字节数组。(要输出"?"当前的PHP版本,您需要类似的东西mb_substr($str, 0, 1, 'UTF-8')。)

为了保持旧的dumb-byte-array行为,您可以使用前缀字符串,b'??'并可以使用将Unicode字符串转换为dumb-byte数组(binary)。所有这些都已添加到PHP 5 中,为PHP 6做准备,因此您可以提前开始更新代码。

好吧,除了PHP 6从未发生过,并且b''前缀和(binary)强制类型转换到目前为止仍然没有任何作用。

  • 我就是这么说的 (3认同)
  • 请注意,它是*`b`前缀转发支持*,而不是“ b前缀转发”。意味着已经抢占了对`b`前缀的支持(“转发”)。 (2认同)
  • 我认为您只是误读了那部分,因此我试图澄清这一点。这些词的分组是(b前缀)和(向前支持)。即* b前缀*的*前瞻支持*。 (2认同)