Что делает 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"
?>