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

Изменение ENUM-типа в PostgreSQL

В PostgreSQL 9.1 значительно расширилась функциональность для работы с пользовательскими типами — появилась возможность добавлять, удалять и изменять атрибуты, а также добавлять значения в ENUM типы. До этой же версии, например в PostgreSQL 8.2, для добавления нового значение к ENUM требовалось совершить гораздо больше действий: ALTER TYPE "foo_type" RENAME TO "_old_foo_type"; CREATE TYPE "foo_type" AS ENUM ('old_one', 'new_one'); ALTER TABLE "bar" ALTER COLUMN "foo" SET DEFAULT NULL; ALTER TABLE "bar" ALTER COLUMN "foo" TYPE "foo_type" USING "foo"::TEXT::"foo_type"; ALTER TABLE "bar" ALTER COLUMN "foo" SET DEFAULT 'new_one'::foo_type; DROP TYPE "_old_foo_type"; ...

July 28, 2014

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

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

February 6, 2013