Этот сайт — моя персональная записная книжка. Интересны мне, по большей части, программирование, история и события из моей жизни.

PHP: (binary)

И, чтобы, как говорится «два раза не вставать», расскажу про самую бесполезную конструкцию в ПХП. Я знаю, что не так много народу знают про (unset), про которую я ворчал вчера, а про эту вещицу, как мне кажется, знает ещё меньше программистов на ПХП.

Одна из неприятных вещей, которые остались в ПХП с давних времён — работа встроенных функций и конструкций только со строками в однобайтовых кодировках. С этим можно жить — есть библиотеки, которые позволяют замести эту проблему под ковёр, но сам язык помогать вам в этом не будет.

Какое-то время назад с этим пытались что-то сделать — в шестой, так и не вышедшей версии ПХП строки решили разделить на два типа — binary, это однобайтовые строки, которые остались в языке до сих пор и string — строки с Юникодом.

К сожалению, работу доделать не осилили, очень уж было сложно, особенно тяжело шло с расширениями. В итоге версия так и не вышла, но так как о ней широко раструбили, пришлось даже пропустить номер — после ПХП 5 вышла сразу седьмая версия.

Но некоторые отголоски этой не совершившейся революции всё-таки можно обнаружить и в современных версиях ПХП.

В версии 8.5 по сих пор есть преобразование типа (binary), которое является алиасом к (string), но выдаёт предупреждение об устаревшей конструкции. А кроме этого, у строки есть префикс b: b"string", придуманный для того, чтобы создавать в ПХП6 однобайтовые строки. В современных версиях ПХП он, разумеется, ничего со строкой не делает.

И эту всю красоту из языка почему-то не удалили, а от (unset) избавились. Никакой логики.

2 комментария
hsh 2 мес

А кроме этого, у строки есть префикс b: b"string", придуманный для того, чтобы создавать в ПХП6 однобайтовые строки.

эталонное уродство, но всё же не так плохо как $obj->method(...)

Евгений Степанищев 2 мес

Это просто вопрос привычки, не более того.

Большая Крокодила 1 мес

Нет, это не вопрос привычки. Я постоянно пишу на PHP, и он заставляет меня ставить миллионы лишних, совершенно ненужных символов, постоянно жать шифт и тянуться к доллару. У меня болят пальцы от этого языка. Его синтаксис уродлив как чёрт знает что. Вторая линия уродства — встроенные функции с их рандомным именованием и порядком аргументов (кажется, вы об этом писали когда-то), так что уверенно писать их по памяти невозможно даже после многих лет работы. Хотя в остальном это сейчас вполне нормальный язык.

Евгений Степанищев 1 мес

У меня болят пальцы от этого языка.

Сочувствую. Скоро ИИ нас всех освободит.

Его синтаксис уродлив как чёрт знает что.

Это — 100% вопрос привычки.

Вторая линия уродства — встроенные функции с их рандомным именованием и порядком аргументов (кажется, вы об этом писали когда-то)…

Да, писал, это сейчас самая большая проблема языка, от которой можно было бы избавиться хотя бы так, как сделали в ДжаваСкрипте — у каждого примитивного типа есть парный объект с прозрачным преобразованием. Не идеально, но лучше чем сейчас. А самые «рандомные» названия на самом деле не рандомные — они из Си пришли.