<rmcreative>

RSS

Все заметки с тегом «PHP»

Можно уточнить:

  1. XCallGraph

    29 мая 2012

    На днях был выложен на всеобщее обозрение ещё один инструмент для анализа результатов профайлинга, полученных при помощи XDebug. Событие весьма интересное, потому как старичок WinCacheGrind автором, похоже, заброшен, а WebGrind иногда нехватает.

    Написан инструмент на Java, поэтому потенциально кроссплатформенный (на данный момент имеются билды под Windows и Linux).

    Официальная страница

    XCallGraph обсуждается на форумах phpclub. Там же автор принимает пожелания и предложения.

    6 комментариев
  2. Подробное сравнение синтаксиса PHP, Perl, Python и Ruby

    30 марта 2012

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

    10 комментариев
  3. PHP и юникод в стрэктрейсе

    12 марта 2012

    Какое-то время назад creocoder наткнулся на ????? вместо значения параметра в логах ошибок Yii. После анализа проблемы стало ясно, что нашёлся баг в PHP.

    Exception::getTraceAsString и Exception::__toString не работают с юникодом в значениях параметров при построении stacktrace. В результате для

    <?php
    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.

    3 комментария
  4. PHP 5.4, работаем с Yii без вебсервера

    6 марта 2012

    В PHP 5.4 появилась возможность работать без какого-то стороннего сервера. Сегодня попробовал с Yii. Работает на ура.

    1. Заходим в вебрут (туда, где у нас index.php).
    2. Запускаем:
    путь/до/php -S localhost:8080
    
    1. Всё. Заходим на http://localhost:8080/ и наслаждаемся.

    Самое приятное, что не требуется прописывать вообще ничего потому как по умолчанию у встроенного в PHP веб-сервера все запросы идут на index.php.

    11 комментариев
  5. 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, так что можно попробовать на не сильно критичных боевых проектах.

    3 комментария
  6. Yii 1.1.10

    13 февраля 2012

    Вышел релиз 1.1.10 PHP фреймворка Yii. В данной версии, в основном, исправлены ошибки в CActiveForm, CJuiDatePicker и невозможность запуска с yiilite.php.

    17 комментариев
  7. Скорость 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

    Кроме того, что анонимные функции удобней, они ещё и быстрее.

    12 комментариев
  8. Сдал Zend PHP 5.3 Certification

    8 февраля 2012

    Zend PHP 5.3 Certified Engineer

    Давно хотел пройти сертификацию Zend. Гайд был изучен, отложены деньги на ваучер, но как-то в течении нескольких лет не доходили руки. Вчера было соответствующее настроение. Позвонил в центр Pearson VUE, который оказался прямо в родном университете, и договорился на утро. Пришёл. Сдал.

    Зачем?

    Читаем

    25 комментариев
  9. 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. Теперь используя тот же самый подход можно перекрыть классы ядра.

    8 комментариев
  10. PhpStorm 3.0

    30 ноября 2011

    Вчера релизнулся PhpStorm третьей версии. Про пару EAP я уже писал. С тех пор вышло семь промежуточных билдов:

    Прогресс очень радует, как и планы на будущее.

    Анонс и обсуждение на хабре

    Анонс в блоге

    13 комментариев