Что на самом деле делает (бинарный) кастинг и почему на него нельзя положиться?

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

Я сталкиваюсь со следующим утверждением Раздел «Кастинг» в руководстве по PHP :

(бинарное) приведение типов и поддержка префикса b были добавлены в PHP 5.2.1.
Обратите внимание, что (двоичное) приведение необходимо так же, как (строка), но это
не следует полагаться.

Я не совсем понял текст выше. Кто-то, пожалуйста, объясните мне с хорошим объяснением.

Я изучил следующие примеры кода, приведенные в руководстве по 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 нет никаких объяснений или оправданий на этот счет.

Кто-то, пожалуйста, помогите мне в этом, направляя меня в правильном направлении.

0

Решение

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) Кастинги до сих пор ничего не делают.

3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector