Что делает этот PHP код?
Сегодня мне нужно написать небольшой прототип сервиса-провайдера. Ему на вход будут приходить данные, он должен вернуть ответ в JSON. Сделать это надо быстро, т.к. основная задача, разработать не сервис-провайдер, а клиент который будет с этим сервисом работать. Для этих целей я решил использовать какой-нибудь микрофреймворк. Я зашел на сайт PHPixie (http://phpixie.com), и увидел вот такой код:
1 2 3 |
<?php $_($fairy->id);?> |
Как вы думаете, что он делает?
Я почему-то подумал, что это какой-то новый функционал PHP 5.4.x, и у меня появилось чувство что от меня скрыли какой-то секрет..
Погуглив я ничего не нашел, тогда уж я из любопытства залез в код и обнаружил следующее:
в классе View
1 2 3 4 5 |
... extract($this->helper->get_aliases()); ... |
в классе View/Helper
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
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); } |
Если это все сократить получится следующее:
1 2 3 |
$_ = function($text){ echo htmlentities($text); }; |
Вызов:
1 2 3 |
$_("Hello world"); |
Результат работы:
1 2 3 |
Hello world |
Позже в CookBook-е, я обнаружите следующее:
<!-- $_() is a function that will escape and print a string. --><!-- It's the equivalent of "echo htmlentities($message)" -->
Однако к этому моменту, я уже знал об этом разобрав исходники..
Вывод:
Если Вы пишете свой фреймворк, то конечно Вы властны делать то, что Вам хочется. Однако, не забывайте что на него будут смотреть не только такие крутые чуваки как я 🙂 , но еще и менее опытные товарищи. Поэтому, похожий функционал надо либо отлично документировать, в отдельном разделе доков (что автор и сделал, а я сразу не заметил), либо использовать более привычные глазу конструкции, вроде стандартных:
1 2 3 |
<?=htmlentities($str)?> |
либо объявлять такие методы, глянув на которые сразу понятно, что происходит:
1 2 3 |
<?=html_esc($str)?> |
Краткость, конечно хорошо, но понятный код еще лучше..
Author: | Tags: /
| Rating:
6 comments.
Write a comment