/** * 获取还原(非转义)后的 $_GET / $_POST / $_FILES / $_COOKIE / $_REQUEST / $_SERVER / $_ENV * @param string $vRoute 变量路由,规则为:“<第一个字母>[:变量索引/[变量索引]] * 例: V('g:TEST/BB'); 表示获取 $_GET['TEST']['BB'] * V('p'); 表示获取 $_POST * V('c:var_name');表示获取 $_COOKIE['var_name'] * 第一个字母需要为小写 * @param mixed $def_v 默认值 * @param boolen $setVar 强制初始化值,并返回true * @return mixed 当使用强制初始化值时,返回true;否则,将返回指定变量路由规则的变量。 */ function V($vRoute, $def_v = NULL, $setVar = false) { static $v = array(); static $vKeyMap = array('C' => '_COOKIE', 'G' => '_GET', 'P' => '_POST', 'R' => '_REQUEST', 'F' => '_FILES', 'S' => '_SERVER', 'E' => '_ENV'); $vRoute = trim($vRoute); //强制初始化值 if ($setVar) { $v[$vRoute] = $def_v; return true; } if (!isset($v[$vRoute])) { if (empty($_REQUEST)) { $_REQUEST = array_merge($_GET, $_POST, $_COOKIE); } if (!preg_match("#^([cgprfse])(?::(.+))?\$#sim", $vRoute, $m) || !isset($vKeyMap[strtoupper($m[1])])) { trigger_error("Can't parse var from vRoute: {$vRoute} ", E_USER_WARNING); return NULL; } $m[1] = strtoupper($m[1]); $tv = $GLOBALS[$vKeyMap[$m[1]]]; if (empty($tv)) { $v[$vRoute] = $def_v; } elseif (empty($m[2])) { $v[$vRoute] = ($m[1] == 'F' || $m[1] == 'S') && version_compare(PHP_VERSION, '5.0.0', '>=') ? $tv : XWB_plugin::_magic_var($tv); } else { $vr = explode('/', $m[2]); foreach ($vr as $vk) { if (!isset($tv[$vk])) { $tv = $def_v; break; } $tv = $tv[$vk]; } $v[$vRoute] = ($m[1] == 'F' || $m[1] == 'S') && version_compare(PHP_VERSION, '5.0.0', '>=') ? $tv : XWB_plugin::_magic_var($tv); } } return $v[$vRoute]; }