[ Index ] |
|
Code source de PRADO 3.0.6 |
1 <?php 2 3 require_once(dirname(__FILE__)."/../Extensions.php"); 4 require_once(dirname(__FILE__)."/Prototypes.php"); 5 6 class PHP_Shell_Extensions_InlineHelp implements PHP_Shell_Extension { 7 public function register() { 8 $cmd = PHP_Shell_Commands::getInstance(); 9 10 $cmd->registerCommand('#^\? #', $this, 'cmdHelp', '? <var>', 11 'show the DocComment a Class, Method or Function'.PHP_EOL. 12 ' e.g.: ? fopen(), ? PHP_Shell, ? $__shell'); 13 } 14 15 /** 16 * handle the '?' commands 17 * 18 * With the help of the Reflection Class we extract the DocComments and display them 19 * For internal Functions we extract the prototype from the php source. 20 * 21 * ? Class::method() 22 * ? $obj->method() 23 * ? Class::property 24 * ? $obj::property 25 * ? Class 26 * ? $obj 27 * ? function() 28 * 29 * The license of the PHP_Shell class 30 * ? license 31 * 32 * @return string the help text 33 */ 34 public function cmdHelp($l) { 35 if ("? " == substr($l, 0, strlen("? "))) { 36 $str = substr($l, 2); 37 38 $cmd = ''; 39 40 if (preg_match('#^([A-Za-z0-9_]+)::([a-zA-Z0-9_]+)\(\s*\)\s*#', $str, $a)) { 41 /* ? Class::method() */ 42 43 $class = $a[1]; 44 $method = $a[2]; 45 46 if (false !== ($proto = PHP_ShellPrototypes::getInstance()->get($class.'::'.$method))) { 47 48 $cmd = sprintf("/**\n* %s\n\n* @params %s\n* @return %s\n*/\n", 49 $proto['description'], 50 $proto['params'], 51 $proto['return'] 52 ); 53 } else if (class_exists($class, false)) { 54 $c = new ReflectionClass($class); 55 56 if ($c->hasMethod($method)) { 57 $cmd = $c->getMethod($method)->getDocComment(); 58 } 59 } 60 } else if (preg_match('#^\$([A-Za-z0-9_]+)->([a-zA-Z0-9_]+)\(\s*\)\s*#', $str, $a)) { 61 /* ? $obj->method() */ 62 if (isset($GLOBALS[$a[1]]) && is_object($GLOBALS[$a[1]])) { 63 $class = get_class($GLOBALS[$a[1]]); 64 $method = $a[2]; 65 66 $c = new ReflectionClass($class); 67 68 if ($c->hasMethod($method)) { 69 $cmd = $c->getMethod($method)->getDocComment(); 70 } 71 } 72 } else if (preg_match('#^([A-Za-z0-9_]+)::([a-zA-Z0-9_]+)\s*$#', $str, $a)) { 73 /* ? Class::property */ 74 $class = $a[1]; 75 $property = $a[2]; 76 if (class_exists($class, false)) { 77 $c = new ReflectionClass($class); 78 79 if ($c->hasProperty($property)) { 80 $cmd = $c->getProperty($property)->getDocComment(); 81 } 82 } 83 } else if (preg_match('#^\$([A-Za-z0-9_]+)->([a-zA-Z0-9_]+)\s*$#', $str, $a)) { 84 /* ? $obj->property */ 85 if (isset($GLOBALS[$a[1]]) && is_object($GLOBALS[$a[1]])) { 86 $class = get_class($GLOBALS[$a[1]]); 87 $method = $a[2]; 88 89 $c = new ReflectionClass($class); 90 91 if ($c->hasProperty($property)) { 92 $cmd = $c->getProperty($property)->getDocComment(); 93 } 94 95 } 96 } else if (preg_match('#^([A-Za-z0-9_]+)$#', $str, $a)) { 97 /* ? Class */ 98 if (class_exists($a[1], false)) { 99 $c = new ReflectionClass($a[1]); 100 $cmd = $c->getDocComment(); 101 } 102 } else if (preg_match('#^\$([A-Za-z0-9_]+)$#', $str, $a)) { 103 /* ? $object */ 104 $obj = $a[1]; 105 if (isset($GLOBALS[$obj]) && is_object($GLOBALS[$obj])) { 106 $class = get_class($GLOBALS[$obj]); 107 108 $c = new ReflectionClass($class); 109 $cmd = $c->getDocComment(); 110 } 111 112 } else if (preg_match('#^([A-Za-z0-9_]+)\(\s*\)$#', $str, $a)) { 113 /* ? function() */ 114 $func = $a[1]; 115 116 if (false !== ($proto = PHP_ShellPrototypes::getInstance()->get($func))) { 117 $cmd = sprintf("/**\n* %s\n*\n* @params %s\n* @return %s\n*/\n", 118 $proto['description'], 119 $proto['params'], 120 $proto['return'] 121 ); 122 } else if (function_exists($func)) { 123 $c = new ReflectionFunction($func); 124 $cmd = $c->getDocComment(); 125 } 126 } 127 128 if ($cmd == '') { 129 $cmd = var_export(sprintf('no help found for \'%s\'', $str), 1); 130 } else { 131 $cmd = var_export($cmd, 1); 132 } 133 } else if ("?" == $l) { 134 $cmd = $this->getHelp(); 135 $cmd = var_export($cmd, 1); 136 } 137 138 return $cmd; 139 } 140 }
titre
Description
Corps
titre
Description
Corps
titre
Description
Corps
titre
Corps
Généré le : Sun Feb 25 21:07:04 2007 | par Balluche grâce à PHPXref 0.7 |