Hack语言新特性简介

简介: Facebook发布的Hack语言是一个运行在HHVM上的语言,在PHP的基础上添加了静态类型检查和一些现代编程语言的特性。

Facebook发布的Hack语言是一个运行在HHVM上的语言,在PHP的基础上添加了静态类型检查和一些现代编程语言的特性。

image.png


类型标记

对于大型项目而言,类型检查可以避免很多问题。

<?hh

classMyClass {

 constint MyConst = 0;

 privatestring$x = '';

 publicfunctionincrement(int$x): int {

   $y = $x + 1;

   return$y;

 }

}

泛型

借鉴了C#和Java

<?hh

classBox<T> {

 protected T $data;

 publicfunction__construct(T $data) {

   $this->data = $data;

 }

 publicfunctiongetData(): T {

   return$this->data;

 }

}

nullable类型

?运算符代表可为空值。


集合

在PHP数组的基础上添加了更丰富的集合类型:

  • Vector
  • Map
  • Set
  • Pair


匿名函数

PHP 5.3开始加入了匿名函数支持,但是和大多数语言不同,匿名函数内需要访问外层的变量的话,需要事先使用use声明。

function ($quantity, $product) use ($tax, &$total)

           {

               $pricePerItem = constant(__CLASS__ . "::PRICE_" .

                   strtoupper($product));

               $total += ($pricePerItem * $quantity) * ($tax + 1.0);

           };

Hack改进了PHP的匿名函数:

<?hh

functionfoo(): (function(string): string) {

 $x = 'bar';

 return$y ==> $x . $y;

}

functiontest(): void {

 $fn = foo();

 echo$fn('baz'); // barbaz

}

其他特性

  • 静态动态分离的方法分发
  • 覆盖父类方法必须声明
  • XHP,输出HTML和XML时自动过滤XSS
  • 改进了trait
  • Continuas
  • 代码必须在函数或类之内
  • 方法名不能呢给和类名一样
  • 不允许调用父类的静态方法
  • 不允许静态调用对象
  • 异步编程


相关链接

相关文章
|
存储 缓存 前端开发
muduo高性能异步日志库的实现
muduo高性能异步日志库的实现
561 0
|
存储 NoSQL 算法
从一个crash问题展开,探索gcc编译优化细节
问题分析的过程也正是技术成长之路,本文以一个gcc编译优化引发的crash为切入点,逐步展开对编译器优化细节的探索之路,在分析过程中打开了新世界的大门……
|
8月前
|
人工智能 自然语言处理 运维
让AI读懂K线图!ChatTS-14B:字节开源的时间序列理解和推理大模型,自然语言提问秒解趋势密码!
ChatTS-14B是字节跳动开源的时间序列专用大模型,基于Qwen2.5-14B微调优化,通过合成数据对齐技术显著提升分析能力,支持自然语言交互完成预测推理等复杂任务。
1807 1
让AI读懂K线图!ChatTS-14B:字节开源的时间序列理解和推理大模型,自然语言提问秒解趋势密码!
|
12月前
|
SQL 存储 关系型数据库
【MySQL基础篇】全面学习总结SQL语法、DataGrip安装教程
本文详细介绍了MySQL中的SQL语法,包括数据定义(DDL)、数据操作(DML)、数据查询(DQL)和数据控制(DCL)四个主要部分。内容涵盖了创建、修改和删除数据库、表以及表字段的操作,以及通过图形化工具DataGrip进行数据库管理和查询。此外,还讲解了数据的增、删、改、查操作,以及查询语句的条件、聚合函数、分组、排序和分页等知识点。
1062 56
【MySQL基础篇】全面学习总结SQL语法、DataGrip安装教程
|
10月前
|
人工智能 自然语言处理 机器人
对话阿里云CIO蒋林泉:AI时代,企业如何做好智能化系统建设?
对话阿里云CIO蒋林泉:AI时代,企业如何做好智能化系统建设?
|
10月前
|
存储 人工智能 Java
一文轻松搞清楚数字电路的锁存器和触发器
数字电路中的锁存器和触发器是核心存储单元,均能存储二进制状态。锁存器为电平敏感型,适用于异步电路;触发器为边沿敏感型,适用于同步时序电路。两者在抗干扰能力、时序控制精度等方面有显著差异。锁存器功耗较低,适合低功耗设计;触发器则更易满足时序要求,广泛用于FPGA和ASIC中。选择时需综合考虑应用场景与时序收敛等因素。
946 0
|
应用服务中间件 网络安全 nginx
nginx 常用命令 |升级到1.20.1版本 | 如何更换 Nginx SSL 证书
nginx 常用命令 |升级到1.20.1版本 | 如何更换 Nginx SSL 证书
806 0
|
JavaScript 前端开发 NoSQL
构建基于Node.js的全栈应用:从前端到后端的完整指南
【5月更文挑战第24天】本文是关于使用Node.js构建全栈应用的指南,涵盖前端(React或Vue)、后端(Node.js + Express)和数据库(MongoDB)的选型与实现。文章介绍了项目结构、前端组件化开发、后端API接口编写、前后端联调及部署上线的注意事项,帮助读者掌握全栈开发流程。
2249 2
|
机器学习/深度学习 自然语言处理 数据可视化
文本挖掘与可视化:生成个性化词云的Python实践【7个案例】
词云是文本数据可视化的工具,显示单词频率,直观、美观,适用于快速展示文本关键信息。 - 用途包括关键词展示、数据探索、报告演示、情感分析和教育。 - 使用`wordcloud`和`matplotlib`库生成词云,`wordcloud`负责生成,`matplotlib`负责显示。 - 示例代码展示了从简单词云到基于蒙版、颜色和关键词权重的复杂词云生成。 - 案例覆盖了中文分词(使用`jieba`库)、自定义颜色和关键词权重的词云。 - 代码示例包括读取文本、分词、设置词云参数、显示和保存图像。
2056 1
|
openCL Linux 异构计算
Linux服务器如何查询GPU型号
【6月更文挑战第13天】Linux服务器如何查询GPU型号
4361 1