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手册中,没有关于这方面的任何解释或理由。
请有人指导我正确的方向来帮助我。
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)强制类型转换到目前为止仍然没有任何作用。