Переизобретая __toArray()

Пытаясь изобрести свой метод toArray()1 для сериализации объектов в ассоциативный массив наткнулся на пару интересных моментов. Методы method_exists и is_callable Можно предположить, что is_callable будет возвращать true для всех методов где method_exists возращает true. Но в действительности это не так. var_dump(is_callable($class, '__toString')); // bool(false) var_dump(method_exists($class, '__toString')); // bool(true) Доступ к закрытым и защищенным свойствам И существование документированной фичи, что при явном приведении типа объекта к массиву, можно получить содержимое скрытых свойств....

December 25, 2014

Имена переменных в PHP

В документации по php сказано: Переменные в PHP представлены знаком доллара с последующим именем переменной. Имя переменной чувствительно к регистру. Имена переменных соответствуют тем же правилам, что и остальные наименования в PHP. Правильное имя переменной должно начинаться с буквы или символа подчеркивания и состоять из букв, цифр и символов подчеркивания в любом количестве. Это можно отобразить регулярным выражением: ‘[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*’ Но на самом деле, имя переменной может быть вообще любой строкой или даже числом:...

October 2, 2014

Алогичное поведение `array_rand`

Нельзя надеяться на результат array_rand() если подразумевается получение нескольких случайных ключей. Как только второй аргумент будет равен единице, вместо массива ключей будет возвращен ключ случайного элемента. Лучше экранировать: if (count($array) > 0 && $amount > 0) { $keys = (array) array_rand($array, min($amount, count($array))); } ...

January 10, 2014

Потоки ввода-вывода в PHP

В PHP, как и в большинстве других языков, ввод и вывод информации может осуществляться посредством потоков. В частности, при работе с CLI могут использоваться стандартные потоки (англ. standard streams) операционной системы. И, не смотря на то, что чаще используются специальные функции и конструкции языка, выполняющие те же действия прозрачно для пользователя, такие как, например, echo, print и printf, периодически возникает необходимость обратится напрямую к таким потокам. Так, например, без стандартных потоков сложно обойтись при работе с получении данных из тела HTTP запроса, при необходимости использования функций, которые поддерживают только ресурсы (fputcsv) или, как было замечено ранее, во время работы в консольном режиме....

February 6, 2013