Целых две страницы с подробным сравением синтаксиса интерпретируемых языков программирования.
Все заметки с тегом «PHP»
-
Подробное сравнение синтаксиса PHP, Perl, Python и Ruby
30 марта 2012
-
PHP и юникод в стрэктрейсе
12 марта 2012
Какое-то время назад creocoder наткнулся на
?????
вместо значения параметра в логах ошибок Yii. После анализа проблемы стало ясно, что нашёлся баг в PHP.Exception::getTraceAsString
иException::__toString
не работают с юникодом в значениях параметров при построении stacktrace. В результате дляfunction test($arg){ throw new Exception(); } try { test('тест'); } catch(Exception $e) { echo $e->getTraceAsString(); echo (string)$e; }
получаем
d:\web\usr\local\php54>php.exe d:\src\exception_wrong_trace\test.php #0 D:\src\exception_wrong_trace\test.php(7): test('????') #1 {main}exception 'Exception' in D:\src\exception_wrong_trace\test.php:3 Stack trace: #0 D:\src\exception_wrong_trace\test.php(7): test('????') #1 {main}
Обойти можно собрав строку руками на основе массива, полученного через
Exception::getTrace
.В Yii пока решили это не фиксить. Заслал баг на php.net.
-
PHP 5.4, работаем с Yii без вебсервера
6 марта 2012
В PHP 5.4 появилась возможность работать без какого-то стороннего сервера. Сегодня попробовал с Yii. Работает на ура.
- Заходим в вебрут (туда, где у нас
index.php
). - Запускаем:
путь/до/php -S localhost:8080
- Всё. Заходим на
http://localhost:8080/
и наслаждаемся.
Самое приятное, что не требуется прописывать вообще ничего потому как по умолчанию у встроенного в PHP веб-сервера все запросы идут на
index.php
. - Заходим в вебрут (туда, где у нас
-
PHP 5.4
2 марта 2012
Релизнулся первый стабильный PHP 5.4. Исправлено более сотни ошибок, добавлены новые возможности, среди которых traits, короткий синтаксис для массивов и другие. Также:
- Уменьшено потребление памяти, ускорено выполнение кода.
- Улучшена работа с юникодом.
- Встроенный вебсервер.
- Убрали кучку устаревших возможностей (
register_globals
, magic quotes, safe mode,allow_call_time_pass_reference
, возможность использоватьbreak
/continue
с переменной).
Вроде как, под nix-ами с 5.4 уже работает APC, так что можно попробовать на не сильно критичных боевых проектах.
-
Yii 1.1.10
13 февраля 2012
Вышел релиз 1.1.10 PHP фреймворка Yii. В данной версии, в основном, исправлены ошибки в
CActiveForm
,CJuiDatePicker
и невозможность запуска сyiilite.php
. -
Скорость eval и анонимных функций
11 февраля 2012
Всё ещё используете
eval
там, где его можно не использовать? Вот ещё одна причина посмотреть в сторону PHP 5.3 и анонимных функций:$count = 50; $start = microtime(true); $y = 0; for($i = 0; $i < $count; $i++) { eval('++$y;'); } printf("#1, result is %d, done in %f\n", $y, microtime(true) - $start); $start = microtime(true); $y = 0; for($i = 0; $i < $count; $i++) { $f = function() use (&$y) { return ++$y; }; $f(); } printf("#2, result is %d, done in %f\n", $y, microtime(true) - $start);
На выходе получаем:
d:\src>php callback_performance.php #1, result is 50, done in 0.000415 #2, result is 50, done in 0.000270 d:\src>php callback_performance.php #1, result is 50, done in 0.000413 #2, result is 50, done in 0.000261 d:\src>php callback_performance.php #1, result is 50, done in 0.000412 #2, result is 50, done in 0.000273
Кроме того, что анонимные функции удобней, они ещё и быстрее.
-
Сдал Zend PHP 5.3 Certification
8 февраля 2012
Давно хотел пройти сертификацию Zend. Гайд был изучен, отложены деньги на ваучер, но как-то в течении нескольких лет не доходили руки. Вчера было соответствующее настроение. Позвонил в центр Pearson VUE, который оказался прямо в родном университете, и договорился на утро. Пришёл. Сдал.
Зачем?
-
Yii 1.1.9
1 января 2012
Вышла стабильная версия Yii 1.1.9. В данном релизе около 60 улучшений и исправленных ошибок.
Полный список изменений можно посмотреть в соответствующем файле. Перед обновлением с более ранних версий важно ознакомиться с инструкциями.
Русскоязычная документация, как обычно, находится в полностью актуальном состоянии. Кроме того, поправлены все найденные на момент релиза опечатки. Спасибо всем, кто использует Orphus на yiiframework.ru.
Рассмотрим наиболее интересные изменения.
Более удобный способ определения
through
в отношениях ActiveRecordОпция
though
была добавлена в версии 1.1.7, но синтаксис был не слишком удобен, так что было решено сделать его более явным. В текущей версии используется следующий синтаксис:'comments'=>array(self::HAS_MANY,'Comment',array('key1'=>'key2'),'through'=>'posts'),
В приведённом выше
array('key1'=>'key2')
:key1
является ключом, определённым в отношении, котрое указано вthrough
(в нашем случае этоposts
).key2
является ключом, определённым в модели, на которую указывает отношение (в нашем случае этоComment
).
through
можно использовать как дляHAS_ONE
, так и дляHAS_MANY
.Подробнее данная возможность описана в разделе Реляционная Active Record полного руководства.
Поддержка групп условий в Model::relations()
Теперь можно использовать группы условий при определении отношений модели:
'recentApprovedComments'=>array(self::BELONGS_TO, 'Post', 'post_id', 'scopes' => array('approved', 'recent')),
При использовании лишь одной группы условий её можно указать как строку.
Возможность сделать JOIN между моделями по заданным ключам
В данной версии стало возможым создание отношений по заданной паре PK->FK не опираясь на схему данных. Это означает, что можно, например, задать следующее отношение для модели
Day
:'jobs'=>array(self::HAS_MANY, 'Job', array('date' => 'target_date')),
В данном случае
Day
может содержать несколькоJob
ов. При этом они не связаны привычным образом. Мы задали ключ в видеarray('fk'=>'pk')
, то есть на выходе мы получим SQL вродеSELECT * FROM day t JOIN job ON t.date = job.target_date
Возможность перекрыть классы ядра при помощи Yii::$classMap
Начиная с 1.1.5 в Yii была возможность заранее импортировать классы и использовать их без явного импорта или
include
. Теперь используя тот же самый подход можно перекрыть классы ядра. -
PhpStorm 3.0
30 ноября 2011
Вчера релизнулся PhpStorm третьей версии. Про пару EAP я уже писал. С тех пор вышло семь промежуточных билдов:
- Поправили большинство ошибок.
- Ещё чуть увеличили скорость работы.
- В общем улучшили дополнение и анализ кода.
- Добавили поддержку нескольких проектов.
- Переделали интерфейс.
- Куча новых опций для форматирования кода.
- Добавили генерацию UML и ER-диаграм по коду и базе и UML-diff.
- Добавили поддержку JsTestDriver (юнит-тестов для JS-кода) из коробки.
- Синхронизация с удалённым проектом теперь умеет рекурсивно сравнивать файлы.
- Добавили поддержку nodejs (для PhpStorm нужно доставить плагин).
Прогресс очень радует, как и планы на будущее.
-
PHP 5.4 beta 2
21 октября 2011
Вышла вторая бета PHP 5.4. RC немного отложили, что, хоть и не является хорошим знаком, но ничего плохого также не означает.
На этот раз новых возможностей немного, чего нельзя сказать о багфиксах: улучшили ошибку при передаче неправильных аргументов в метод, производительность тернарного оператора, некоторые итераторы из SPL научились работать с потоками по умолчанию.
В 5.4 будет много вкусного, но, похоже, ничего такого, ради чего стоило бы переходить на него сейчас же.
Большинство изменений — улучшение уже существующего синтаксиса. Да, всё это замечательно, но только ради этого менять стабильное и проведенное на сырое и не обкатанное не стоит. Трэйты — штука действительно занятная, но, сдаётся мне, толку от них будет не сильно много. Заменить те же mixin или behavior они не могут по причине отсутствия состояния. Возможно, будет и вред т.к. фактически трейты поощряют, хоть и умный, но копи-пейст.
Ещё одним аргументом остаться на 5.3 на какое-то время является отсутствие APC под 5.4. Вероятность, что его доделают до релиза, покачто мала.