Что на самом деле делает (бинарный) кастинг и почему на него нельзя положиться? - PullRequest
0 голосов
/ 11 декабря 2018

Я использую PHP 7.2.12

Я сталкиваюсь со следующим утверждением из раздела Type Casting руководства PHP :

*В PHP 5.2.1 была добавлена ​​поддержка 1009 * (двоичного) приведения и переадресации префиксов 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 голосов
/ 11 декабря 2018

PHP имеет Большие планы ™ для PHP 6 , где строки в конечном итоге станут строками Unicode.Чтобы проиллюстрировать, что это означает, текущее поведение PHP:

$str = '漢字';
echo $str[0];
// ?

В PHP 6 это будет иметь вывод "漢" вместо сломанного ?.Другими словами, строки кодируют и распознают символы, а не массивы байтов.(Чтобы вывести "漢" в текущих версиях PHP, вам нужно что-то вроде mb_substr($str, 0, 1, 'UTF-8').)

Чтобы сохранить старое поведение dumb-byte-array, вы можете добавить префикс в строку к b'漢字' и вы можете привестиUnicode-строки в немые байтовые массивы, используя (binary).Все это было добавлено в PHP 5 при подготовке для PHP 6, так что вы можете начать обновление своего кода заранее.

Ну, кроме PHP 6 никогда не было , иb'' префиксы и (binary) приведения по-прежнему ничего не делают к этой дате.

...