Что делает b перед строковыми литералами?
$binary = b'Binary string';
Каковы последствия для создания строки как b
inary?
Я не мог найти никакого намека на это в документации. Просто нашел это небольшое любопытство, просматривая язык_сканера.
Ответы
Ответ 1
Это токен прямой совместимости для никогда не выпускаемой версии PHP версии 6, которая должна иметь встроенную поддержку юникода.
В PHP6 строки по умолчанию имеют unicode, а функции работают на уровне символов юникода. Это "b" означает "двоичная строка", то есть строка, отличная от unicode, для которой функции работают на уровне байтов.
Это не влияет на PHP!= 6, где все строки являются двоичными.
Ответ 2
Двоичное кастинг доступно с 5.2.1, но не вступает в силу до 6.0, когда вступают в силу строки Юникода.
Это объясняет, почему это не делает ничего особенного прямо сейчас для меня на сервере с использованием 5.2.6:
<?php
$t = b"hey";
var_dump($t);
//string(3) "hey"
$s = (binary)"hey";
var_dump($s);
//string(3) "hey"
?>