Чтобы использовать методы и член объекта, вам сначала нужно создать этот объект. Если вы его не создали (переменная, которая должна содержать объект, не инициализируется), но вы пытаетесь использовать его методы или переменные, вы получите эту ошибку.
Иногда вы можете просто забыть инициализировать .
Отредактировано: new не может вернуть значение null, но исключение огня при ошибке. Давно это было на некоторых языках, но не больше. Спасибо @John Saunders за указание на это.
Это означает, что функция будет работать правильно, когда вы передадите произвольные двоичные данные (т.е. строки, содержащие байты без ASCII и / или нулевые байты).
Например, функция, не являющаяся двоичной, может основываться на функции C, которая ожидает строки с нулевым завершением, поэтому, если строка содержит нулевой символ, функция будет игнорировать что-либо после нее.
Это актуально, поскольку PHP не выполняет чисто разделение строковых и двоичных данных .
Дополнительные примеры:
<?php
$string1 = "Hello";
$string2 = "Hello\x00World";
// This function is NOT ! binary safe
echo strcoll($string1, $string2); // gives 0, strings are equal.
// This function is binary safe
echo strcmp($string1, $string2); // gives <0, $string1 is less than $string2.
?>
\x
указывает шестнадцатеричную нотацию. См. Строки PHP
0x00 = NULL
0x04 = EOT (End of transmission)
Таблица ASCII , чтобы увидеть список символов ASCII
Hello\r\nWORLD
не должен быть таким же, как Hello
, если функция двоично-безопасная, не так ли?
– Charlie Parker
9 July 2014 в 03:28
Другие пользователи уже упоминали, что означает binary safe
вообще.
В PHP смысл более конкретный, ссылаясь только на то, что дает Майкл в качестве примера.
All строки в PHP имеют длину, связанную с числом байтов, которые ее составляют. Когда функция манипулирует строкой, она может либо:
0
. Также верно, что все строковые переменные PHP, управляемые движком, также завершают нуль. Проблема с функциями, которые полагаются на 2., состоит в том, что если сама строка содержит байт со значением 0
, функция, которая манипулирует им, будет думать, что строка закончилась в этой точке и будет игнорировать все после этого.
Например, если функция PHP strlen
работала как стандартная библиотека C strlen
, результат здесь был бы неправильным:
$str = "abc\x00abc";
echo strlen($str); //gives 7, not 3!