PHP рдкрд░рд╛рд╡рд░реНрддрди рд╕реБрд╡рд┐рдзрд╛рдПрдБ

рд╕рдм рдХреБрдЫ рд▓рд┐рдЦрд╛ рд╡реИрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рд╡рдлрд╛рджрд╛рд░ рд╣реЛрдиреЗ рдХрд╛ рджрд╛рд╡рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдПрдХ рдирд┐рдпрдВрддреНрд░рдХ рдХрд╛ рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рд╣реИ, рдФрд░ 1 рдХреЗ 1 рдореЗрдВ рдирд╛рд╕рдордЭ рдирдХрд▓ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд╢рдВрд╕рд┐рдд рдирд╣реАрдВ рд╣реИред

рд╕рд┐рдореНрдлрдиреА 2 рдореЗрдВ рдореИрдВрдиреЗ рдЬреЛ рдлрд╝рдВрдХреНрд╢рди рддрд░реНрдХ рджрд┐рдП рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рд╕реАрдзреЗ URL рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдкреИрд░рд╛рдореАрдЯрд░ рд▓рд┐рдЦрдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ред рдорд╛рд░реНрдЧреЛрдВ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП PHPdoc рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдЕрдкрдиреЗ рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рдЗрд╕ рддрд░рд╣ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:
class Controller { /** *   * @a /^[0-9]+$/i * @b /^[0-9a-z]+$/i */ function testAction ( $a, $b = 'something' ) { echo 'a: '.$a.', b: '.$b; } } 



рдпрджрд┐, рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдЖрдк 1 рдХреЛ 1 рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╕рдЪреЗрдд рд░рд╣реЗрдВ:
- рдкреНрд░рддрд┐рдмрд┐рдВрдм рдПрдкреАрдЖрдИ рдзреАрдорд╛ рд╣реИ
- рдореЛрдЯрд╛рдкреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛
- рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреА рдЧреИрд░-рд╕реНрдкрд╖реНрдЯрддрд╛ рдФрд░ рд╡реИрдЪрд╛рд░рд┐рдХ рд╡рд┐рдХреГрддрд┐
- рдПрдХ рдЯреАрдо рдореЗрдВ рдпрд╛ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерди / рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╕рд╛рде рд╕рдВрднрд╛рд╡рд┐рдд рдХрдард┐рдирд╛рдЗрдпреЛрдВред


рддреЛ, рдХрд╛рд░реНрдп: рдпрджрд┐ рдЪрд░ "a" рдкрд╛рд╕ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╛ "рдЕрддрд┐рд░рд┐рдХреНрдд" рдЪрд░ рдкрд╛рд░рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИ, рдпрджрд┐ рдЪрд░ "b" рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рддреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рджреЛрдиреЛрдВ рдЪрд░ PHPDoc рдореЗрдВ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЗ рдЦрд┐рд▓рд╛рдл рдЬрд╛рдВрдЪреЗ рдЬрд╛рддреЗ рд╣реИрдВред

рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╕рддреНрдпрд╛рдкрди рд╕рдорд╛рд░реЛрд╣ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдирд┐рдХрд▓рд╛:
 function CheckURLValid ( $class, $method, $values_arr = array() ) { $class = new ReflectionClass( $class ); $method = $class->getMethod( $method ); $param = $method->getParameters(); $doc = $method->getDocComment(); // PHPdoc preg_match_all( '/@([a-z0-9_-]+)([^\n]+)/is', $doc, $arr ); $reg_arr = array_combine($arr[1], $arr[2]); //    $params_arr = array(); foreach ( $param as $p ) { $key = $p->getName(); $value = isset ( $values_arr[$key] ) ? $values_arr[$key] : false; $regular = isset ( $reg_arr[$key] ) ? trim($reg_arr[$key]) : false; $default = $p->isDefaultValueAvailable() ? $p->getDefaultValue() : NULL; //   -  if ( isset ( $values_arr[$key] ) ) { if ( $regular && !preg_match( $regular, $values_arr[$key] ) ) throw new Exception( ' "'.$key.'"  !' ); //       } elseif ( !$p->isOptional() ) throw new Exception( '    !' ); //     $params_arr[$key] = $value ? $value : $default; } //    if ( count(array_diff_key( $values_arr, $params_arr )) ) throw new Exception ( '  !' ); return $params_arr; } 


рдЙрдкрдпреЛрдЧ рдЙрджрд╛рд╣рд░рдг:
 try { $arr = CheckURLValid( 'Controller', 'testAction', $_GET ); call_user_func_array( array('Controller', 'testAction'), $arr ); } catch ( Exception $e ) { echo $e->getMessage(); } 

рдЖрдк рдкреНрд░рдХрд╛рд░ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ:
/test.php
/test.php?a=abc
/test.php?a=12
/test.php?a=12&b=another
/test.php?a=12&c=13

рдЖрдк рдПрдХ рдлрд╝рд╛рдЗрд▓ рдЙрдард╛ рд╕рдХрддреЗ рд╣реИрдВред

Source: https://habr.com/ru/post/In139649/


All Articles