<rmcreative>

RSS

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

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

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

    30 марта 2012

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

    10 комментариев
  2. 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 комментария
  3. 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 комментариев
  4. 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 комментария
  5. Yii 1.1.10

    13 февраля 2012

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

    17 комментариев
  6. Скорость 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 комментариев
  7. Сдал Zend PHP 5.3 Certification

    8 февраля 2012

    Zend PHP 5.3 Certified Engineer

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

    Зачем?

    Читаем

    25 комментариев
  8. 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 комментариев
  9. PhpStorm 3.0

    30 ноября 2011

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

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

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

    Анонс в блоге

    13 комментариев
  10. PHP 5.4 beta 2

    21 октября 2011

    Вышла вторая бета PHP 5.4. RC немного отложили, что, хоть и не является хорошим знаком, но ничего плохого также не означает.

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

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

    Большинство изменений — улучшение уже существующего синтаксиса. Да, всё это замечательно, но только ради этого менять стабильное и проведенное на сырое и не обкатанное не стоит. Трэйты — штука действительно занятная, но, сдаётся мне, толку от них будет не сильно много. Заменить те же mixin или behavior они не могут по причине отсутствия состояния. Возможно, будет и вред т.к. фактически трейты поощряют, хоть и умный, но копи-пейст.

    Ещё одним аргументом остаться на 5.3 на какое-то время является отсутствие APC под 5.4. Вероятность, что его доделают до релиза, покачто мала.

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