namespace R;
/**
* A more convenient interface to filters
* @author gri
*
*/
class _Request{
protected function getScope(){
switch (substr(static::who(),2)){
case 'GET': return INPUT_GET;
case 'POST': return INPUT_POST;
case 'COOKIE': return INPUT_COOKIE;
default: trigger_error('The scope is not supported',E_USER_ERROR);
}
}
/**
* @param string $var
*/
static function bool($var){
return filter_input(self::getScope(), $var,FILTER_VALIDATE_BOOLEAN);
}
/**
* @param string $var
*/
static function numeric($var){
return filter_input(self::getScope(), $var,FILTER_VALIDATE_FLOAT);
}
/**
* @param string $var
*/
static function int($var){
return filter_input(self::getScope(),$var,FILTER_VALIDATE_INT);
}
/**
* @param string $var
*/
static function intPositive($var){
return filter_input(self::getScope(),$var,FILTER_VALIDATE_INT,array('options'=>array('min_range'=>1)));
}
/**
* @param string $var
*/
static function numericPositive($var){
return filter_input(self::getScope(),$var,FILTER_VALIDATE_FLOAT,array('options'=>array('min_range'=>1)));
}
/**
* @param string $var
*/
static function email($var){
return filter_input(self::getScope(),$var,FILTER_SANITIZE_EMAIL);
}
/**
* @param string $var
*/
static function url($var){
return filter_input(self::getScope(),$var,FILTER_SANITIZE_URL);
}
/**
* @param string $var
*/
static function scalar($var){
return filter_input(self::getScope(),$var,FILTER_UNSAFE_RAW);
}
}
class POST extends _Request{
protected function who(){
return __CLASS__;
}
}
class GET extends _Request{
protected function who(){
return __CLASS__;
}
}
class COOKIE extends _Request{
protected function who(){
return __CLASS__;
}
}
$id = R\GET::intPositive('id');
/**
* return value from request
* get(0),
* get(0, 'default', Kiss_Type::T_STRING)
* get('test', 0, Kiss_Type::T_INTEGER)
* get('test', new Exception_Badparam('не передан id'), Kiss_Type::T_INTEGER)
* @param string $key
* @param mixed $default
* @param string $type
* @return mixed
*/
public function get($key, $default = null, $type = null) {
if ($this->has($key)) {
if ($type) {
return Kiss_Type::run($this->part[$key], $type);
} else {
return $this->part[$key];
}
} else {
if (is_object($default) && $default instanceof Exception) {
throw $default;
} else {
return $default;
}
}
}
вот уж не скажите, имхо вообще не понятно написано r/ - 1) это не точка как в других языках при обращении к свойтсву, 2) это не :: и 3) не ->if ($post_id = r\GET::intPositive('id')){ немного более читабельно на мой взгляд, чем if ($post_id = GET::intPositive('id')){
Хот так хоть так получается операция деления. Это ж надо было придумасть так неймспейсы обозначать...Читаемость этой хрени весьма увеличивается, если вокруг бэкслеша ставить пробел.
Чё?А это потому что там лексер тупой, без понятия о контексте. Ну, зато быстрый![]()
да вроде он понятно написал... я даже не особо пытаясь понять внутрености интерпритаторов и компиляторов представляю себе очень хорошо "тупой лексер")))
ну они короче все понятно написали)Сначала Sokil.Dmytro пишет, что «\» — операция деления (я вот даже сразу и не вспомню в каком ЯП бекслеш выступает в роли оператора деления, причём целочисленного).Потом fixxxer ему поясняет (?!), что там (в PHP, да?) лексер «тупой»: без понятия о контексте. Я вот этой связи двух предложений не улавливаю совсем. К тому же понятие о контексте совсем не требуется: к примеру, амперсанд может выступать как в роли обозначения ссылки, так и бинарного оператора в зависимости от текущего состояния автомата. Ну, раз ты понял, craz, то объясняй!
причем тут акселератор? иметься ввиду что разобрать строку \ проще чем с каким нибудь ., fixxxer - да? Или не телепат я пока?)Если даже это как-то бы повлияло на скорость (pfff), то есть акселераторы.
— акселератор сохраняет байт-код, который будет выглядеть совершенно одинаково какой бы там разделитель не был. Неужели я так непонятно пишу, craz? Других ты понимаешь (хоть и неправильно) прямо-таки сразу.причем тут акселератор?
ладно ладно, приношу свои извинения, я же сказал я мало понимаю в интерпритаторах и компиляторах, не знал что акселератор будет такую конструкцию захордкоживать во что-то более быстрое.— акселератор сохраняет байт-код, который будет выглядеть совершенно одинаково какой бы там разделитель не был. Неужели я так непонятно пишу, craz? Других ты понимаешь (хоть и неправильно) прямо-таки сразу.
... и придумаете как бы слеш изменить на более адекватные :: или точку...Возможно вы еще сможете показать как раз то место где разбираеться данная лексема?
call_user_func_array(array("namespace\typicalClass", "method"), array(1,2,3))
я имею ввиду что мне не хватит знаний докопаться в исходниках до этого места... и придумаете как бы слеш изменить на более адекватные :: или точку...
Я кстати тоже не понимаю почему в чем трудности отличить имя неймспейса от имени класса и использовать ::
— трудность в том, что отличить просто невозможно.Я кстати тоже не понимаю почему в чем трудности отличить имя неймспейса от имени класса и использовать ::
— зачем тебе? См. Zend/zend_language_parser.c (грамматика описана в файле с тем же названием, только с расширением *.y). Он, естественно, сгенерирован.Возможно вы еще сможете показать как раз то место где разбираеться данная лексема?