Записи с меткой ‘php’
Использование ruby-like модулей в PHP
Недавно мне пришлось работать с очень длинными классами, примерно 1000-1300 строк. Они, знаете ли, не очень удобны для работы. Все время хотелось их разнести по разным модулям, как в ruby, чтобы не мешались в одной куче. А потом подключать эти модули в класс, возможно даже не в один. В итоге я сделал следующее:
Как я настроил встроенный дебагер для Zend Studio 5.0
Решил обновить версию PHP для встроенного дебагера в Zend Studio 5. Версия была 5.0.1. Очень старенькая решил обновить до 5.2.11.
Что делал:
- Скачал php версии 5.2.11 с официального сайта.
- Скачал Studio Web Debugger
- Сделал резервные копии всех файлов в папке
C:\Program Files\Zend\ZendStudioClient-5.0.0\bin\php5(Просто переименовал их, добавив к имени суффикс_old) - Скопировал в папку
C:\Program Files\Zend\ZendStudioClient-5.0.0\bin\php5файлыphp5ts.dllиphp-cgi.exeиз скаченного архива PHP - Скопировал в папку
C:\Program Files\Zend\ZendStudioClient-5.0.0\lib\php5файлZendDebugger.dllиз архива с Studio Web Debugger. ({Studio Web Debugger папка}/5_2_x_comp) - Создал файл
C:\Program Files\Zend\ZendStudioClient-5.0.0\bin\php5\php.ini. Добавил туда:
zend_debugger.allow_hosts=127.0.0.1/32
session.save_path=C:\Program Files\Zend\ZendStudioClient-5.0.0\tmp
- Запустил ZDE и проверил версию PHP в дебагере с помошью функции
phpinfo(). Отлично, то что нужно. - Добавил в
php.iniнеобходимые расширения:
[PHP_CURL]
extension=php_curl.dll
[PHP_GD2]
extension=php_gd2.dll
[PHP_MBSTRING]
extension=php_mbstring.dll
[PHP_MYSQL]
extension=php_mysql.dll
[PHP_MYSQLI]
extension=php_mysqli.dll
[PHP_PGSQL]
extension=php_pgsql.dll
[PHP_PDO]
extension=php_pdo.dll
[PHP_PDO_MYSQL]
extension=php_pdo_mysql.dll
[PHP_PDO_PGSQL]
extension=php_pdo_pgsql.dll
[PHP_SHMOP]
extension=php_shmop.dll
[PHP_SOCKETS]
extension=php_sockets.dll
[PHP_ZIP]
extension=php_zip.dll
Ссылки:
Переводим ошибки php в Exception
Очень жаль что до сих пор в php не сделали нормальную поддержку Exception. Небольшой трюк описанный ниже позволяет на почти все ошибки php вызывать исключение, которое мы можем потом отловить и обработать, если необходимо.
Реализация google protocol buffers на php
phpbuf – реализация google protocol buffers на php.
Эта библиотека не имеет пока генераторов кода. Классы сообщений нужно писать самому. Благо что пишутся они очень просто.
Правильные окончания для единственного и множественного чисел
Эта небольшая функция поможет отобразить правильные окончания у существительных в единственном и множественном числе
{
if($number > 20) { $strval = strval($number); $number = $strval[strlen($strval) - 1]; }
if ($number == 0) { return $two; }
if ($number == 1) { return $one; }
if ($number > 1 && $number <= 4) { return $two; }
if ($number > 4 && $number < 21) { return $three; }
}
Используем:
<?= pluralize(1, "медведь", "медведя", "медведей"); ?>
// 2 медведя
<?= pluralize(2, "медведь", "медведя", "медведей"); ?>
// 6 медведей
<?= pluralize(6, "медведь", "медведя", "медведей"); ?>
//21 медведь
<?= pluralize(21, "медведь", "медведя", "медведей"); ?>
Избавляемся от операторов if и foreach в шаблонах
Часто в шаблонах приходится использовать вывод по условию. В результате шаблон обрастает трудно читаемыми конструкциями, типа:
< ? foreach($comments as $comment): ?>
< ?= include_view("comment", array("comment" => $comment)) ?>
< ? endforeach ?>
< ? endif ?>
< ? if($reader->canWriteComments()): ?>
< ?= include_view("comment_form") ?>
< ? endif ?>
или
Можно написать помощника, который будет выводить текст по условию.
Помощники с блоком аля content_for для Rails в cakePHP
По ходу разработки одного проекта на cakePHP возникла необходимость создания помошника, использующего блок, как в ruby. Использовали jQuery, и конструкцию $(document).ready(function(){…}) добавляли в разных шаблонах и подшаблонах.
В результате эти блоки оказывались разбросанными по всему HTML документу. Это не очень удобно при отладке. Приходится перемещаться по всему документу в поисках нужного блока. Чтобы исправить ситуацию, создали помошник, который собирает все куски $(document).ready(function(){…}) в разных подшаблонах и размещает их в одном месте, например, в секции head страницы.
Помошник действует по принципу рельсовой вспомогательной функции content_for, которой в блоке передается кусок шаблона для отображения в другом месте.
Были созданы три функции: jQueryReadyStart(), jQueryReadyEnd(), jQueryReadyShow(). Тело $(document).ready(function(){…}) помещалось между двумя вызовами функций jQueryReadyStart() и jQueryReadyEnd().
DoctrinePHP. Руководство пользователя. Глава 2 Управление соединениями.
2.1 DSN, Описание Источника Данных
2.2 Открытие нового соединения
Открытие нового соединения с базы данных в Доктрине очень легко. Если Вы желаете использовать PDO (www.php.net/PDO), Вам нужно только инициализировать новый объект PDO:
Листинг. 36
$dsn = 'mysql:dbname=testdb;host=127.0.0.1';
$user = 'dbuser';
$password = 'dbpass';
try {
$dbh = new PDO($dsn, $user, $password);
$conn = Doctrine_Manager::connection($dbh);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
?>
Заметьте, что непосредственная передача объекта PDO в Doctrine_Manager::connection() не позволяет Доктрине узнать имя пользователя и пароль к базе, так как нет никакой возможности получить их от PDO. Однако, имя пользователя и пароль требуется Доктрине для того чтобы иметь возможность создавать и удалять базы данных. Для этого Вы должны вручную установить имя пользователя и пароль непосредственно используя объект $conn.
DoctrinePHP. Руководство пользователя. Глава 1 Начало.
1.1 Требования
Для использования Доктрины требуется PHP> = 5.2. Она не требует никаких внешних библиотек. Для связи с базои? данных Доктрина использует PDO, которыи? установлен в php по умолчанию.
1.2 Установка
Есть в настоящее время четыре различных способа установки Доктрины.
- SVN (subversion)
- SVN externals
- Pear
- Zip архив
Рекомендуется загрузить Доктрину через SVN (subversion), потому что в этом случае ее легко обновлять. Если ваш проект уже находится под контролем SVN, Вы должны выбрать SVN externals.
Если вы хотите попробывать Доктрину, то используи?те sandbox.

(4 голосов, средний: 4.75 из 5)