Показаны сообщения с ярлыком php. Показать все сообщения
Показаны сообщения с ярлыком php. Показать все сообщения

четверг, 21 февраля 2013 г.

Создание объекта без вызова существующего конструктора

Иногда, бывает необходимо создать объект определенного класса без автоматического вызова конструктора. Стоит обратить на два ссылки, реализующие данный подход. Первая so-ссылка дает вариант прямой модификации сериализованного представления объекта (заимстовавно из одноименного пакета Phpunit), во второй ссылке просто используется ReflectionClass::newInstanceWithoutConstructor

На мой взгляд оба метода интересны и заслуживают внимания. С помощью этих методов можно реализовать довольно много полезных вещей.




суббота, 18 августа 2012 г.

PHP IDE? Eclipse? Yes... , but Emacs!

почти все работает с небольшими допиливаниями напильником и надфилем.
Только нужен емакс 24. Все есть. Особенно мне нравится в новом емаксе пакетные менеджеры: свой встроенный и el-get

Ставил все практически из этих пакетных менеджеров. Кроме окружения pear2 (pyrus + Codesniffer) и кое-что из пакетов генту для емакса и джавы-скрипт (nodejs для jslint)

скриншот:



мой конфиг в емаксе:
pastebin

для адаптации сразу надо порешать корректную установку el-get с зависимостями. Сначала стремно и неудобно, но потом с лихвой окупается.

keywords:
emacs, emacs24, php, ide, nodejs, jslint, codesniffer, screenshot, eclipse, el-get, gentoo, install, emacs.d, config, .emacs, dot-emacs, pear, pear2, pyrus, sample, example, pastebin

суббота, 21 июля 2012 г.

Autoload, APC, Стабилизация PHP-5.4

Ведущий мантейнер dev-lang/php пишет php-5-4-about-to-be-stabilised в своем блоге о стабилизации в дереве портов пакета версии PHP-5.4.
Одна из причин, почему это не происходит: задержки в выходе «кэшера» APC для PHP-5.4, довольно востребованного расширения. Расширение еще не стабилизировано для этой версии PHP и неизвестно хотя-бы приблизительно, когда будет релиз. Пока автор рекомендует пользоваться XCache. Примерно такая-же ситуация с наборами патчей безопасности Suhosin

На мой взгляд, APC действительно востребован. Фактически это хорошая opensource-замена многим продуктам zend.com, zend guard, zend encoder, ioncube и им подобных. На страничке данного расширения можно видеть, что последние версии вышли довольно недавно, но в статусе бетты. Последний стабильный релиз был в середине мая 2011 года. Среди разработчиков расширения, можно заметить Расмуса и других хорошо известных личностей. Это обнадеживает, что скоро стабилизация APC произойдет. Просто разработчики скорее всего были заняты доводкой PHP-5.4 весь период 2011-2012 гг.
Причем судя по коммитам в http://svn.php.net/viewvc/pecl/apc/trunk/ (странно однако, почему они сидят на древнем svn-не, а не на git-е), Расмус ведет самое активное участие в доводке APC. Читайте статью Расмуса про кеширование и ускорение php-приложений и вообще http://talks.php.net/show/w2e09

APC и другие «кэшеры» не решают архитектурные проблемы приложения. Для ускорения работы php-приложений без APC можно использовать следующий подход (паттерн). Первый оператор Вашего приложения это include 'autoload.php' в index.php. В autoload.php Вы объявляете лучше статичный класс примерно так


Еще одно немаловажно правило. Теперь все запросы на поиск файла в котором содержится искомый класс, будут приходить сначала сюда... Поэтому рекомендуется убрать везде, где можно в проекте include*, require* и добавить все классы проекта, которые планируется использовать. Несколько классов содержащихся в одном файле нужно добавить явно, как будто они находятся в разных файлах.

Данный пример подходит для небольших проектов и библиотек с небольшим числом классов. Для более удобного применения, необходимо добавить метод что-то типа Autoload::provideClasses(...)

PHP, gentoo, portage, tree, blog, APC, Xcache, production, dev-lang/php, Suhosin, PHP-5.4., 5.4, 5.3+, patch, security, development, stable, stabilisation, пакет, стабилизация, безопасность, cache, кэш, ebuild, extension, pecl, расширение, class, autoload, spl, spl_autoload_register, debug, namespace, path, include, require, example, solution, performance, Rasmus, pattern, zend, encode, ioncube, zend guard, alternative, encoder, code




среда, 4 апреля 2012 г.

PHP, PDT, Eclipse, Line delimiters, solution


Это небольшая заметка для тех, кто кроме емакса или другого нехилого любимого редактора иногда или постоянно использует замечательную IDE eclipse + PDT + Linux для разработки приложений на php.

Где-то в недавнем времени начала 2012 года, после обновления эклипсы стали внезапно, ненавязчиво и как говорят «тихо и незаметно» добавляться «завершители строк» в формате Windows. Да, причем настолько незаметно, что только потом, в «коммитах» гита можно заметить, что что-то не-так. Я решил, что это забавный глюк. Но не тут-то было. Все манипуляции и пере-установки были тщетны. Только спасала ручная конвертация. И вот сегодня это уже достало настолько, что я случайно нашел решение на stackoverflow, опубликованное каким-то добрым человеком. Респект авторам!

По данной ссылке читаем решение проблемы

Кратко передаю шаги решения проблемы:
PHP > Editor > Typing > When pasting adjust indentation

Удачи


суббота, 24 декабря 2011 г.

PHP 5.4 приближается

В то время, как народ начал потихоньку переезжать на 5.3, незаметно приблизился новый PHP 5.4

Что радует, так это наличие в дереве портов этой версии, возможно hard-masked.

Можно успокоить себя мыслью о том, что 5.3 была переходной версией, вносящая кардинальные перемены и это давало нам шанс перестроить свою архитектуру в правильное русло. Это отчасти так, но те кто остается на ветке 5.2, надеясь, что 5.4 или 6, 7 будет круче и тогда они честно перейдут сразу в новый мир пушистых зверьков, вероятно находятся в некотором заблуждении.

5.3 был сделан как раз для того, чтобы можно было с минимальными потерями перебраться на новые версии, потому как дальше терпеть эту архитектуру нет никаких сил. Ход конем оправдан в некоторых ситуациях, но мы имеем дело в основном с эволюционированием плавными итерациями. И цена которую придется заплатить более поздним переходом будет высока.

Среди кардинальных проблем перехода на новые версии PHP являются:


  •  бардак подключаемых модулей через include-hell (читайте тут: http://talks.php.net/show/w2e09 )
  • возврат значений по ссылке
  • строгий контроль ошибок
  • глобальные имена
  • пространство имен
  • консервативность пакетных систем дистрибутивов
  • тонны быдло-кода и вместе с быдло-фреймворками не готовые к переходу на 5.3+
  • ущербность некоторых ключевых архитектурных решений в самом движке PHP
  • pear-hell
Фреймворки успевшие попасть в стрим 5.3 симфони2 и зенд, типо3 провели фундаментальную работу по переходу на 5.3 и это им в большей степени удалось. Однако это привело к некоторым в корне неверным решениям и попыткой привнести и сохранить старую идеологию в новые версии, но тем не менее качество решений остается на приемлемом уровне. Мне лично не нравится очень большой уровень вложенности каталогов, эмулирующих пространство имен.

Задаваясь вопросом о характерных признаках правильно 5.3-арзитектуры можно отметить следующие:
  • 99% использование splautoload
  • 99% использование итераторов
  • активное применение "замыкание" closure 
  • spl
  • активное применение непрерывного цикла интеграции и разработки в купе с юнит-тестами и гитом, влкючая подъем рабочих юнит тестов одним "пинкомy" как говорится "заводится с пол-оборота"

Что делать?
Ответ прост: думать, рефакторить, думать, читать, изучать, придумывать и кодить. Основная проблема это определение приоритетов. Нужно строить систему таким образом, в первую очередь реализуя то,без чего система бессмысленна. Это как правило функционал. Остальное приложится.

Итак что нового в 5.4?

Много нового в общем.

В настоящий момент: traits (типа примеси) , встроенный веб-сервер, значительные удобства работы с массивами типа в стиле jquery, замыкания в классах и улучшенный контекст их работы и что-то там еще.
http://jburrows.wordpress.com/2011/12/17/what-to-look-for-in-php-5-4-0/

миграция с 5.3 на 5.4: http://php.net/manual/en/migration54.php (документ в разработке)


что хотелось бы видеть в новом php?
побольше функциональщины
некоторые возможности, приближающиеся к erlang
tuples, lists
"прозрачный" интерфейс взаимодействия с расширениями и их разработка
удобство интеграции в дистрибутивы

у меня накопилось множество ссылок по материалам php, php53

http://www.delicious.com/dancecodes/php
http://www.delicious.com/dancecodes/php53
http://www.delicious.com/dancecodes/php54




суббота, 4 декабря 2010 г.

Обновлена документация для PHP на сайте gentoo.org

Как сообщает Ole Markus в своем блоге, обновилась документация для пакета dev-lang/php

С выходом версии 5.3 и его поддержкой в генту добавилось много изменений, незнание которых может вызвать ряд проблем при устновке php на gentoo. В частности, теперь возможна установка в генту нескольких версий php одновременно в так называемых "слотах", используя вспомогательный пакет app-admin/eselect-php

Как это сделать, теперь более внятно разъясняется в php-guide на сайте генту в секции Slotting используя специальную переменную PHP_TARGETS. И тем не менее полностью не удается избежать проблем. В частности, это касается пакета phpunit например. Утилита /usr/bin/phpunit содержит некорректный путь к интерпретатору php. Фрагмент "неправильного" кода из /usr/bin/phpunit :


#!/usr/lib/php5/bin/php


Воспользовавшись командой whereis php мы получаем следущий код:


whereis php
php: /usr/bin/php /etc/php /usr/lib/php5.3 /usr/share/php


соответственно, путь должен быть таким

#!/usr/lib/php5.3/bin/php
...



Возможно, переустановка пакета phpunit будет содержать правильный путь в /usr/bin/phpunit
Не пробовал. Использую собственную сборку phpunit в виде исполняемого phar-архива.

Кроме того, в документации упоминается о SAPI, поддерживаемых через USE-флаги.
Это флаги: cgi, cli, apache2, fpm (PHP FastCgi Process Manager), embed (встроенный embedded PHP client) Наиболее интересные флаги конечно это fpm и embed. Теретически Embed-флаг позволяет "встраивать" php в другие языки, например python, C

Затронута так-же в двух словах о переустановке pecl-расширений при слоттинге php-версий

Ссылки:
  • Документация по апгрейду PHP


  • Блог Ole Markus


  • Ссылка на статью об обновлении документации PHP
  • воскресенье, 31 октября 2010 г.

    Поведение php-5.3.3 и sqlite, sqlite2, sqlite3, pdo в gentoo

    Есть статья посвященная этой теме. Смысл в том, что надо использовать USE-флаг sqlite3 для предотвращения возможных проблем со старыми драйверами pdo-sqlite. Новый PDO работает теперь только с sqlite3.

    Просто сделайте USE="-sqlite sqlite3" emerge -v php. После, чтобы увидеть эффект этого, просто выполните emerge --depclean -av и увидите, что sqlite2 будет выкинут из системы. Если вы установите php без корректировки USE-флагов sqlite sqlite3, то получите обе работающих библиотеки. В дальнейшем такая конфигурация будет сопровождаться генерацией нотиса в php при работе приложения.

    На мой взгляд имеет смысл отказаться заблаговременно от использования старых версий sqlite. И по возможности использовать только sqlite3. Но реально воспользоваться этой возможностью можно только перейдя на php53.

    Новый sqlite3 поддерживает юникод (UTF-8), что отражается на корректной сортировке данных. Версии sqlite ниже <3 br="">
    В общем для решения этих проблем просто установите генту с последними версиями sqlite и пхп...

    ;)

    ключевые слова:
    драйвер, сортировка, юникод, установка, генту, sql, sqlite, sqlite3, data, php, php53, php5.3, portage, gentoo, ebuild, emerge, pdo, unicode, utf

    upd 2013:
    warning: this article actual for old gentoo versions - latest builds may work not such

    внимание: данная статья актуальна для очень старых сборок - последние версии gentoo могут иметь другое поведение с этими флагами. Наблюдалось не очень логичное поведение portage - пришлось несколько раз пересобирать, возможно это просто мешали старые флаги или не поддерживаемые пакеты. 

    upd 2013:
    warning for advertisers: if you want place backlink here or something other please contact me or/and use donate button.

    среда, 16 июня 2010 г.

    Подборка пакетов для PHP 5.3

    • Экспериментальное расширение для загрузки классов PHP53 с бенчмарками:
      SplClassLoader php extension benchmarks Исходный текст пакета тут Автор утверждает, что все работает очень быстро, но небольшие тормоза есть при использовании имен файлов без путей. Хотя разница незначительная.

    • Экспериментальный скрипт "полуавтоматической" миграции с php5 на php53. Ссылка В общем скрипт "помогает/облегчает" процесс адаптации кода для работы в среде php53, пытается выявить узкие места.

    • Одна из реализаций библиотек для работы с CouchDB с использованием php53. По всем признакам это пока пробный шар. Автор недавно перебрался на 5.3 и пока используются только базовые возможности. Пространства имен не используются, но радует, что народ начинает подтягиваться ;) Да и сама CouchDB очень прикольная вещь. На мой взгляд весь интерфейс для работы с диваном можно сделать через curl...

    понедельник, 31 мая 2010 г.

    Установка нового php-5.3.2.ebuild из оффициального дерева портов Gentoo

    ВНИМАНИЕ! ВНИМАНИЕ! ВНИМАНИЕ!

    статья устарела и может быть полезна только в познавательных целях или для очень давно не обновляемых серверов с генту.

    Сейчас 53 достаточно стабилен и установка достаточно тривиальна.

    Смотрите руководства по установке/обновлению php на сайте gentoo.org

    Статьи на сайтах gentoo-wiki также выглядят устаревшими. Лично мое мнение: надо использовать в полный рост PHP 5.4 и готовиться к PHP 5.5+

    ===============================================


    Установка и остальные тесты моих приложений прошли без каких-либо приключений, за исключением переустановки pecl-расширений и размаскировки dev-php5/pecl-syck

    В стабильной ветке данного ebuild требуется USE = spl, а для >=5.3.2 он не нужен. Соответственно в masked dev-php5/pecl-syck стоит проверка версии php.

    В общем все работает :)

    WARNING!!!
    Данный ebuild пока p.masked и для его установки Вам необходимо в /usr/portage/package.mask закомментировать строчку содержащую =dev-lang/php-5.3* Ожидается, что статус пакета предположительно сменится через пару недель с момента публикации.

    воскресенье, 20 сентября 2009 г.

    Новые возможности PHP 5.3 Автозагрузка классов, пакеты, SPL, namespace, Phar, Closure в действии (часть 1)

    Здесь размещен код моей экспериментальной библиотеки для эффективного применения PHP 5.3

    В ближайших постах расскажу более подробно

    Установка PHP 5.3 на Gentoo Linux

    ВНИМАНИЕ! ВНИМАНИЕ! ВНИМАНИЕ!
    статья устарела и может быть полезна только в познавательных целях или для очень давно не обновляемых серверов с генту.
    Сейчас 53 достаточно стабилен и установка достаточно тривиальна.
    Смотрите руководства по установке/обновлению php на сайте gentoo.org
    Статьи на сайтах gentoo-wiki также выглядят устаревшими. Лично мое мнение: надо использовать в полный рост PHP 5.4 и готовиться к PHP 5.5+
    ===============================================


    Сабж, собственно практически ничем не отличается от установок предыдущих версий ниже 5.3 Хотя, безусловно есть нюансы. Возможно, в других дистрибутивах линукса это не так, но в Генту все довольно круто :)

    Я не случайно делаю оговорку по этому поводу и конечно не призываю Вас выбросить Ваш любимый дистр и сломя голову перейти на Генту... Мне весьма понятна эта тема, так как когда-то давно выбрался именно Генту, прекрасно осознавая, что наиболее свежий софт более-менее будет доступен из репозитариев этого дистра. Итак, хватит лирики приступим:

    Подготовка


    Для установки Вам потребуется:


    • убежденность, что свежий PHP 5.3 это есть гут :)

    • терпение и внимательность

    • ebuild PHP 5.3 Если, Вы никогда не устанавливали ebuild(s), то советую Вам почитать соответствующие мануалы. Иначе ничего не получится. Все дело в том, что это неофициальный ebuild т.е. он "нормальный" :), но его еще пока нет в официальном дереве портов Генту. Вы не можете сделать просто:
      emerge --sync && emerge -avDuN php

      Тем не менее, это не значит, что этот ебилд нельзя использовать. Просто он находится в фазе активного тестирования в рамках всевозможного софта, зависимостей пакетов и библиотек, платформ и т.д. На моих машинах данный ебилд работает прекрасно. Взять его можно будет по этому урлу: PHP 5.3 ebuild Внимательно и вдумчиво копируем и устанавливаем ебилды, вдохновляясь вкусностями новой версии...

    • будьте готовы к тому, что после обновления, Ваши скрипты с вызовами вида:
      doMyFunc(& $args);
      будут приводить к предупреждениям интерпретатора. Для совместимости можно отключить эти сообщения в конфигах php.ini Некоторые приложения будут несомненно глючить или вообще не будут работать. Для справки: достаточно свежий phpbb прекрасно справился с 5.3, но бекапы в основном к БД сделать предварительно не помешает

    • Перед установкой рекомендуется обновить pear, pecl и удалить лишние расширения. Для чистоты установки лучше предварительно деинсталлировать все pecl-расширения. Некоторые из-них не будут нормально работать или вообще откажут в сборке. Про другие, Генту уведомит ненавязчиво... Возможный список проблемных расширений: python, xdebug, APC...

      Насчет последнего - отдельная тема... Он устанавливается из последних версий бета, и даже работает, но пока миграция не закончена, лучше отключить нафиг... С xdebug примерно тоже самое.


    О настройках ключей компиляции


    (необязательно, но рекомендуется):
    sudo nano -w /etc/portage/package.use


    и добавить или обновить строчку (привожу мои ключи):
    dev-lang/php sharedext pcntl apache2 pdo postgres tidy bzip2 tokenizer ctype curl memcache oci8-instant-client hash sqlite

    Сборка пакета


    Если все сделали правильно, то по команде
    emerge -vDuNp php
    увидим готовность Генту установить PHP 5.3. Еще раз проверяем все и "емерджим" новый PHP...

    Завершение


    -по завершении установки не забываем про новые конфиги:
    dispatch-conf
    Очень внимательно и самое главное честно прописываем timezone в конфигах иначе возможны пляски с бубном... Делаем apache2 restart и наконец приступаем радостно к работе с новой версией.

    Продолжение следует...


    В ближайших постах расскажу о новых возможностях 5.3 в плане быстрой и удобной автозагрузки модулей классов и реального применения пхп-пэкэджей с нейм-спейсами, SPL и многое другое... Хотя некоторые возможности есть и у ветки 5.2, но по настоящему с ними работать приятнее конечно в новой версии. Всем удачи!

    Полезные ссылки


    Установка и разработка ebuild
    О ebuild на русском
    Зачем нужен eclass