Почему PHP не имеет аргумента длины для функций, которые работают с двоичными данными? - PullRequest
2 голосов
/ 27 сентября 2011

Почему функции, работающие с двоичными данными, не имеют аргументов длины?Я родом из Си-Си, так что это действительно смущает меня.Я подумал, что, возможно, строковый объект содержит длину, но это не так (поправьте меня, если я ошибаюсь).Два примера функций, демонстрирующих это поведение, - base64_encode / decode и bin2hex.

Спасибо!

Ответы [ 2 ]

2 голосов
/ 27 сентября 2011

PHP-строки не похожи на C-строки.

Прошло много времени с тех пор, как я думал о внутренних органах. Насколько я помню, переменные php известны как "zvals", и это в основном структура, которая отслеживает такие вещи, как тип данных, длина и сами данные.

Таким образом, внутренне (по крайней мере, до довольно низкого уровня) PHP, вероятно, избегает полагаться на нулевое завершение, чтобы узнать, где заканчивается строка.

РЕДАКТИРОВАТЬ: Вот старая статья , в которой обсуждаются некоторые внутренние реализации переменных пространства пользователя в PHP

2 голосов
/ 27 сентября 2011

Строковые объекты PHP хранят длину внутри. Вы можете получить это значение, вызвав strlen, но так как php имеет автоматическое управление, вам редко нужно беспокоиться об этом:

echo strlen("a\0b\0c"); // 5
...