<rmcreative>

RSS

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

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

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

    8 февраля 2012

    Zend PHP 5.3 Certified Engineer

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

    Зачем?

    Читаем

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

    30 ноября 2011

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

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

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

    Анонс в блоге

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

    21 октября 2011

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

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

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

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

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

    5 комментариев
  6. Современный брутфорс и безопасный логин

    2 октября 2011

    Оказывается, любой печатный восьмисимвольный пароль в домашних условиях ломается перебором всех комбинаций за три с половиной дня. Это при том, что хеширован он вполне современным sha256. Всего несколько лет назад на такой перебор могли уйти годы, а то и вся жизнь.

    Что же теперь делать?

    1. Можно и нужно сделать лимит на количество попыток ввода пароля. По достижении лимита можно, например, просить ввести капчу. Однако, если произойдёт «утечка» базы данных, что, конечно, бывает не так часто, но бывает, ограничение не поможет.
    2. Хорошим решением будет в дополнение сделать вычисление хеша более ресурсоёмкой операцией. Пользователь не заметит, а вот для взломщика перебор станет, если не невозможным, то, как минимум, финансово невыгодным. Реализуется, например, при помощи bcrypt. Выглядеть это может примерно как здесь.
    27 комментариев
  7. traits и члены класса

    1 октября 2011

    traits в PHP 5.4 — довольно занятный механизм. Хотя, приведённое ниже в официальном мануале не показывается (возможно, решили перестраховаться), но работает:

    trait MyTrait
    {
        public $traitVar = 'trait var';
     
        public function test()
        {
            echo $this->traitVar;
            echo $this->classVar;
        }
    }
     
    class MyClass
    {
        private $classVar = 'class var';
        use MyTrait;
    }
     
    $c = new MyClass();
    $c->test();
    echo $c->traitVar;
    28 комментариев
  8. PhpStorm 3.0 EAP 108.1421

    28 сентября 2011

    Вот и вторая сборка EAP 3.0. Кроме исправления небольшого числа зависаний и полузависаний есть и очень вкусная штука: поиск дублирующегося кода. Такого пока нет ни в одной известной мне IDE. Я уже успел поиграться и могу сказать, что штука определённо полезная.

    12 комментариев
  9. PhpStorm 3.0, первый EAP-билд 108.1343

    22 сентября 2011

    Вот и вышел первый EAP-билд долгожданной третьей версии полюбившейся многим разработчикам PHP IDE. Остаток дня был проведён за кодом уже в новом билде. Впечатления положительные. Что же интересного принесла нам свежая EAP? Среди просто нереального количества фиксов болячек разной степени важности стоит выделить следующее.

    Производительность

    Разница действительно очень значительна. Теперь ощущения от работы автодополнения и набора текста в общем очень похожи на работу в «нативных» IDE.

    Также обещают более плавную работу с большими проектами при использовании 32-х битной JRE. Как раз мой случай.

    Похоже, мне повезло. Коллеги жалуются на задержки в автокомплите. Возможно, связано с комплитом из библиотек.

    Интерфейс

    Интерфейс претерпел значительные изменения. Сразу бросаются в глаза похудевшие табы, более компактные и продуманные диалоги. Linux и Mac тоже вниманием не обделили. Маку дали более приятный вид и fullscreen, линуксу drag&drop файлов и кучу фиксов.

    PHP

    • Автоматический перевод курсора в нужное место при записи ассоциативного массива с каждым элементом на новой строке (ура!).
    • Улучшили анализ синтаксиса и подсветку ошибок.
    • Различные улучшения в поддержке XDebug.
    • Добавили тулзу для анализа дампов профайлера XDebug.
    • Поправлены ошибки автоформаттера.
    • Поправили неприятное поведение при вводе кавычек.
    • В настройках можно выбрать конкретный интерпретатор PHP. Зачем, правда, пока не ясно.
    • Улучшили поддержку Twig.
    • Улучшили дополнение по namespace и в замыканиях.
    • Нормально реагирует на ENTER внутри PHPDoc, да и вообще много всего по PHPDoc (ура!)
    • Улучшена поддержка Phing.
    • Поддержка @return $this, @return self и @return static, что очень полезно для дополнения в Yii.

    JavaScript

    • Улучшенная поддержка синтаксиса библиотек.
    • Фиксы форматирования и анализа кода.
    • JSLint / JSHint

    CSS / HTML

    • Автоматический перевод курсора в нужное место при записи CSS лесенкой.
    • Фикснули оптимизацию перекрывающих друг друга записей.
    • Улучшили поддержку HTML5.
    • Поменяли диалог для выбора цвета. Добавили пипетку и возможность вводить цвет в hex. Убрали HSB. Попробую привыкнуть.
    • Zen Coding 0.7

    Разное

    • Добавили возможность исключать директории из заливки по FTP.
    • XSLT debugger

    Так как это первый билд третьей версии, стоит отбэкапить настройки перед обновлением. У меня лично обновилось всё без особых проблем, но мало-ли.

    51 комментарий
  10. PHP 5.4 beta1

    16 сентября 2011

    PHP 5.4 перешёл в статус beta, что не может не радовать. Официальный анонс ещё впереди, а пока можно почитать описание на хабре. Стоит отметить:

    Полный changelog тоже можно посмотреть.

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

    Пощупать в деле можно тут или здесь для Windows.

    2 комментария