Главная > Frameworks | PHP > Что делает этот PHP код?

Что делает этот PHP код?

31.01.2014 6 комментариев » Просмотры: 3 694
 

PHPixie фреймворк

Сегодня мне нужно написать небольшой прототип сервиса-провайдера. Ему на вход будут приходить данные, он должен вернуть ответ в JSON. Сделать это надо быстро, т.к. основная задача, разработать не сервис-провайдер, а клиент который будет с этим сервисом работать. Для этих целей я решил использовать какой-нибудь микрофреймворк. Я зашел на сайт PHPixie, и увидел вот такой код:

<?php $_($fairy->id);?>

Как вы думаете, что он делает?

Я почему-то подумал, что это какой-то новый функционал PHP 5.4.x, и у меня появилось чувство что от меня скрыли какой-то секрет..

Погуглив я ничего не нашел, тогда уж я из любопытства залез в код и обнаружил следующее:

в классе View

...
extract($this->helper->get_aliases());
...

в классе View/Helper

protected $aliases = array(
    '_' => 'output'
);

public function get_aliases() {
   $aliases = array();
   foreach($this->aliases as $alias => $method)
       $aliases[$alias] = array($this, $method);
   return $aliases;
}

public function escape($str) {
    return htmlentities($str);
}

public function output($str) {
   echo $this->escape($str);
}

Если это все сократить получится следующее:

 $_ = function($text){ echo htmlentities($text); };

Вызов:

 $_("Hello world");

Результат работы:

Hello world

Позже в CookBook-е, я обнаружите следующее:

<!-- $_() is a function that will escape and print a string. -->
<!-- It's the equivalent of "echo htmlentities($message)" -->

Однако к этому моменту, я уже знал об этом разобрав исходники..

Вывод:

Если Вы пишете свой фреймворк, то конечно Вы властны делать то, что Вам хочется. Однако, не забывайте что на него будут смотреть не только такие крутые чуваки как я 🙂 , но еще и менее опытные товарищи. Поэтому, похожий функционал надо либо отлично документировать, в отдельном разделе доков (что автор и сделал, а я сразу не заметил), либо использовать более привычные глазу конструкции, вроде стандартных:

<?=htmlentities($str)?>

либо объявлять такие методы, глянув на которые сразу понятно, что происходит:

<?=html_esc($str)?>

Краткость, конечно хорошо, но понятный код еще лучше..

Post Scriptum

Для своего сервиса-провайдера, я выбрал микрофреймворк GluePHP. Правда микрофреймворк - сильно сказано, скорее это обычный класс роутера. Но, мне больше пока и не надо 🙂

 

Автор: | Теги: ,

Важно

У нас заработал ФОРУМ. Все вопросы, которые не касаются статьи, а так же вопросы по конкретно вашему случаю нужно задавать и обсуждать именно там, в разделе "Помощь пользователям".

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

Написать свой
  1. елм Ответить
    05.12.2014 в 9:35 дп
    где берут такую капчу?
    тоже такую хочу себе в блог.
    подскажи пожалуйста
    • Vitaliy Orlov
      Vitaliy Orlov Ответить
      09.12.2014 в 8:23 дп
      Эту каптчу можно установить через установку плагинов, она называется WP NotCaptcha. Что касается ввода дня недели, это уже моя кастомизация, потому что некоторых спаммеров Not Captcha не останавливает.
      Многие жалуются что такая, двойная каптча очень мешает, поэтому не советую так мудрить. Сам переделаю систему отправки комментариев в ближайшем будущем. Во всяком случае очень хотел бы это сделать :)
  2. Рустам Борисов Ответить
    02.04.2014 в 10:22 пп
    Круто, жаль что не в теме)))
  3. Dracony Ответить
    01.02.2014 в 6:33 пп
    Пасябки =)
  4. Dracony Ответить
    31.01.2014 в 7:37 пп
    Все описано вот тут:
    http://phpixie.com/tutorials/general-information/
    • Vitaliy Orlov
      Vitaliy Orlov Ответить
      01.02.2014 в 7:30 дп
      Почему-то я не добрался до этого раздела - моя вина, не все доки прочитал.

      Отдельное спасибо за фреймворк! Рассматривал его так же, как что-то достаточно простое и одновременно более функциональное чем FlightPHP и менее громоздкое чем Kohana или ZF. Мне многое понравилось, останется испытать в подходящем проекте.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Разрешены HTML-теги: <a>, <code>, <i>, <em>, <strong>, <b>, <u>, <strike>