Daily Archives: June 24, 2010

PHP Best practice

Здесь я собрал некоторые лучшие практики по PHP, которым следую (ну или буду следовать 🙂

Для итерации по массивам, их изменению и фильтрации – учимся использовать array_* функции в пхп. Особенно лямбда-функции:

<?php

Используйте константы для того что никогда не меняется. Они парсятся в самом начале и лежат вообще в другом куске памяти чем обычные переменные. Конструкции вида $str = ‘some’ . STR_CONSTANT и выглядят к тому же лучше.

PHP includes caching

Сейчас озадачен проблемой кэширования инклюдов. Взглянул на наш проект, более 150 инклюдов, и это только на Zend Framework. Нашел ссылку про __autoload с кэширование, сейчас копаю в этом направлении.

Осталось понять, как автоматически парсить инклюды в исходном коде и вырезать их…

По сути вот моя проблема.

Возможные ходы по решению:

In order to preserve the API, I extended Zend_Loader and started overwriting functions such as Zend_Loader::_securityCheck(),

phpDocumentor и UTF-8 исходники

Как заставить phpDocumentator понимать русский текст в исходниках на UTF-8:

1. нужно править файл Setup.inc.php. В нем есть метод createDocs, где нужно исправить следующее
– if (stristr($ret, “utf-8”) !== “”)
+ if (stristr($ret, “utf-8”) === false)
{
$ret = utf8_decode($ret);
}

2. Пройтись глобальной заменой по всем (*.*) файлам документатора и заменить
charset=iso-8859-1’/>
на
charset=utf-8’/>

3. Необязательный (у меня и без этого заработало,

Произвольный html-код в Zend_Form

Возникла сегодня в процессе работы над одним проектом такая задача. Но нигде не смог найти решение.
Можно обрамить форму с помощью Zend_Form_Decorator_HtmlTag, а вот просто вставить код нельзя.
Zend_Form_Decorator_HtmlTag при создании получает переменную tag, например td, и выдает примерно следующее:

А если убрать закрывающийся тэг, а из первого убрать треугольные скобки?
Мысля пошла…

И я разработал Zend_Form_Decorator_HtmlCode (cкачать можно тут).

Теперь в Zend_Form_Element мы можем добавить наш декоратор.

Пагинация в Doctrine (Использование SQL_CALC_FOUND_ROWS)

Начиная от версии 4.0 в СУБД MySQL появилась достаточно удобная возможность подсчета количества всех подходящих под запрос записей, когда количество записей ограничивается LIMIT’ом. При работе с поиском в БД, а так же при выборках из таблиц с большим количеством записей такой функционал просто необходим. В этой статье я расскажу, как можно использовать эту возможность в ORM Doctrine

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

Точные имена свойств модели в Doctrine

Эта статья посвящена точному(с учётом регистра) отображению названий колонок таблицы БД в свойства модели. Данная проблема актуальна для 1ой ветки ORM, т.к. во второй ветке она похоже уже решена. Но т.к. стабильным релизом на данный момент является версия 1.2.1 а версия 2 в стадии ALPHA4, то думаю, что эта проблема актуальная для многих пользователей ORM.

Если camelCase названия/алиасы колонок не используются в вашем проекте, то данное решение будет неактуально для вас.