Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/251.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php (二元)转换实际上做什么?为什么不应该依赖它?_Php_String_Types_Casting_Binary - Fatal编程技术网

Php (二元)转换实际上做什么?为什么不应该依赖它?

Php (二元)转换实际上做什么?为什么不应该依赖它?,php,string,types,casting,binary,Php,String,Types,Casting,Binary,我使用的是PHP7.2.12 我在报告中看到以下陈述: PHP5.2.1中添加了(二进制)强制转换和b前缀转发支持。 请注意,(二进制)强制转换与(字符串)基本相同,但是 不应该被依赖 我没有完全理解上面的课文。请有人给我解释清楚 我在同一页上研究了PHP手册中给出的以下代码示例: <?php $binary = (binary) $string; var_dump($binary); $binary = b"binary string"; var_dump($binary); ?>

我使用的是PHP7.2.12

我在报告中看到以下陈述:

PHP5.2.1中添加了(二进制)强制转换和b前缀转发支持。 请注意,(二进制)强制转换与(字符串)基本相同,但是 不应该被依赖

我没有完全理解上面的课文。请有人给我解释清楚

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

<?php
$binary = (binary) $string;
var_dump($binary);
$binary = b"binary string";
var_dump($binary);
?>
如果你看上面的输出,即使在转换成二进制之后,我也得到了相同的字符串。那么,二进制转换实际上做什么转换工作呢

为什么不应该依赖二元铸造

另外,向我解释什么类型的二元铸造可以完成?我是说这是合法的

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

有人请帮我,指引我正确的方向

PHP有,字符串最终会变成Unicode字符串。为了说明这意味着什么,当前的PHP行为:

$str = '漢字';
echo $str[0];
// ?
在PHP6中,这将有输出
”漢"
而不是坏掉的
。换句话说,字符串是编码和字符感知的,而不是哑字节数组。(输出
)漢“
在当前的PHP版本中,您需要类似于
mb\u substr($str,0,1,'UTF-8')

要保持旧的哑字节数组行为,可以在字符串前面加
b'漢字'(binary)
将Unicode字符串强制转换为哑字节数组。这些都是为了准备PHP6而添加到PHP5中的,因此您可以提前开始更新代码

好吧,除了和
b''
前缀和
(二进制)
强制转换到目前为止仍然没有任何作用。

PHP有,其中字符串最终会变成Unicode字符串。为了说明这意味着什么,当前的PHP行为:

$str = '漢字';
echo $str[0];
// ?
在PHP6中,这将有输出
”漢“
而不是坏掉的
。换句话说,字符串是编码和字符感知的,而不是哑字节数组。(输出
”漢“
在当前的PHP版本中,您需要类似于
mb\u substr($str,0,1,'UTF-8')

要保持旧的哑字节数组行为,可以在字符串前面加
b'漢字'(binary)
将Unicode字符串强制转换为哑字节数组。这些都是为了准备PHP6而添加到PHP5中的,因此您可以提前开始更新代码


好吧,除了和
b''
前缀和
(二进制)
强制转换到目前为止仍然没有任何作用。

你是说在当前PHP7.1+版本的时代,'(二进制)“casting”和“b prefix forward”没有任何用处,因为这些东西是通过记住从未发布过的PHP6版本中的unicode支持添加到PHP中的?这就是我要说的。请注意,它是
b
-前缀forward支持,而不是“b prefix forward”。这意味着对
b
前缀的支持已经被抢占(“forward”)添加。那么,为什么手册文本像这样“PHP5.2.1中添加了b前缀转发支持”?我想你只是误读了这一部分,我试图澄清这一点。这些单词的分组是(b前缀)和(转发支持)。也就是说,对b前缀的转发支持。你是说在当前PHP7.1+版本的时代,(二进制)“casting”和“b prefix forward”没有任何用处,因为这些东西是通过记住从未发布过的PHP6版本中的unicode支持添加到PHP中的?这就是我要说的。请注意,它是
b
-前缀forward支持,而不是“b prefix forward”。这意味着对
b
前缀的支持已经被抢占(“forward”)添加。那么,为什么手册文本像这样“PHP5.2.1中添加了b前缀转发支持”?我想你只是误读了这一部分,我试图澄清这一点。这些单词的分组是(b前缀)和(转发支持)。即,对b前缀的转发支持。