я использую 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 нет никаких объяснений или оправданий на этот счет.
Кто-то, пожалуйста, помогите мне в этом, направляя меня в правильном направлении.
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)
Кастинги до сих пор ничего не делают.
Других решений пока нет …