Переизобретая __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

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

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

January 10, 2014

Автоматические индексы в PostgreSQL

Если вы постоянно используете PostgreSQL, то должно быть в курсе, что, в соответствии с SQL стандартами, при задании ограничений (Constraints) таких как первичный ключ (Primary Key) или ограничение уникальности (Uniqueness) автоматически создается и b-tree индекс для участвующих в ограничении полей, в то время как для внешнего ключа индекс не создается и его требуется генерировать вручную (подробнее можно прочитать здесь). Однако для людей ранее использовавших MySQL это может быть не очевидным, так как в MySQL InnoDB индексы создаются автоматически для всех внешних ключей, даже если index_name не указывается явным образом....

February 11, 2013