《Hack与HHVM权威指南》——1.5.1 使用超级全局变量

本节书摘来自华章出版社《Hack与HHVM权威指南》一书中的第1章,第1.5.1节,作者 Owen Yamauchi,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

1.5.1 使用超级全局变量

超级全局变量是在每个代码范围内都存在的全局变量,不需要使用global语句即可使用。这些在运行环境中特殊存在的变量一共有9个,分别是:
$GLOBALS
$_SERVER
$_GET
$_POST
$_FILES
$_COOKIE
$_SESSION
$_REQUEST
$_ENV
在Hack的严格模式下,并不支持超级全局变量。如果你试图使用它们中的某一个,类型检查器将会告诉你这个变量未定义。然而在通常的Web应用或者脚本的编写过程中,这些超级变量又是不可或缺的。
要解决上述问题,你能够做的最简单的办法就是,在一个局部模式的文件下编写访问器函数,然后在严格模式下的文件中调用。

function get_params(): array {
  return $_GET;
 }
function env_vars(): array {
  return $_ENV; 
}
// ...

这样的方式对你代码的类型安全不会有任何贡献。然而,我们还可以做得更好。特别是对于HTTP的GET和POST参数来说,你经常知道所期待的值的类型,所以你可以根据这个知识点来得到更加强健的代码:

function string_param(string $key): ?string {
  if (!array_key_exists($_GET, $key)) {
    return null;
  }
  $value = $_GET[$key];
  return is_string($value) ? $value : null; 
}
// 或者选择下面的增强版:如果类型错误将抛出异常
function string_param(string $key): ?string {
  if (!array_key_exists($_GET, $key)) {
    return null;
  }
  $value = $_GET[$key];
  invariant(is_string($value), 'GET param must be a string');
  return $value; 
}

我们将在1.7节更加详细地了解invariant()函数的使用方法。目前来说,我们仅仅需要知道如果第一个参数是false,它将会抛出一个异常。
针对其他的超级全局变量和值类型,你还可以编写类似的访问器代码。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值