Почему в php есть бинарные безопасные и бинарные небезопасные функции?

Есть ли причина для такого поведения / реализации?
Пример:

$array = array("index_of_an_array" => "value");
class Foo {
    private $index_of_an_array;
    function __construct() {}   
}
$foo = new Foo();
$array = (array)$foo;
$key = str_replace("Foo", "", array_keys($array)[0]);
echo $array[$key];

Дает нам ошибкукоторый завершен:

УВЕДОМЛЕНИЕ Неопределенный индекс: в строке № 9

Пример № 2:

echo date("Y\0/m/d");

Выходы:

2016

НО! echo или жеvar_dump()Например, и некоторые другие функции будут выводить строку «как есть», просто \ 0 байтов скрыты браузерами.

$string = "index-of\0-an-array";
$strgin2 = "Y\0/m/d";
echo $string;
echo $string2;
var_dump($string);
var_dump($string2);

Выходы:

Индекс-оф-ан-массива
"Y / м / д"
строка (18) "индекс-массива"
Строка (6) "Г / м / д"

Заметить, что$string длина 18, но показаны 17 символов.

РЕДАКТИРОВАТЬ

Отвозможный дубликат а такжеРуководство по PHP:

Ключ может быть целым числом или строкой. Значение может быть любого типа. Строки, содержащие действительные целые числа, будут преобразованы в целочисленный тип. Например. ключ «8» будет фактически сохранен в 8. С другой стороны, «08» не будет приведен, поскольку он не является действительным десятичным целым числом. Короче говоря, любая строка может быть ключом. И строка может содержать любые двоичные данные (до 2 ГБ). Следовательно, ключом могут быть любые двоичные данные (поскольку строка может быть любыми двоичными данными).

Отподробности строки php:

Нет ограничений на значения, из которых может состоять строка; в частности, байты со значением 0 («байты NUL») разрешены в любом месте строки (однако некоторые функции, которые в этом руководстве не являются «бинарно-безопасными»), могут передавать строки библиотекам, которые игнорируют данные после NUL байт.)

Но я до сих пор не понимаю, почему язык разработан таким образом? Есть ли причины для такого поведения / реализации? Почему PHP не обрабатывает ввод как бинарный безопасный везде, но только в некоторых функциях?

Откомментарий:

Причина в том, что многие функции PHP, такие какprintf использовать реализацию библиотеки C за кулисами, потому что разработчики PHP были ленивы.

Такие, какecho, var_dump, print_r ? Другими словами, функции, которые что-то выводят. На самом деле они бинарно безопасны, если мы посмотрим на мой первый пример. Не имеет смысла реализовывать некоторые бинарно-безопасные и бинарно-небезопасные функции для вывода. Или просто используйте некоторые из них, как они есть в std lib в C, и напишите некоторые совершенно новые функции.

Ответы на вопрос(3)

Ваш ответ на вопрос