看一下黑客,hhvm中的PHP替代品
您可以使用先前创建的Vagrant框来运行本文的代码段。
钥匙要点HHVM中的PHP替换
- hack是一种静态拼写的语言,这意味着您必须为应用程序中的所有变量提供类型。但是,hack使用“逐渐键入”系统,其中仅在“严格”模式下预期类型,即使那样,hack也足够聪明,可以推断本地变量类型。
- hack介绍了一些改进PHP的功能,包括用户属性,这些功能是Facebook的注释的实现和XHP,XHP是增强语言语法的PHP扩展程序,以使XML文档片段成为有效的PHP表达式。 尽管黑客和HHVM具有优势,但他们的采用仍然存在障碍,包括缺乏对PECL扩展的支持以及HHVM仅由Facebook支持的事实。但是,Facebook的工具可以自动编译HHVM目标的PHP扩展,并且据报道,HHVM的扩展比为PHP开发更容易。
- 为什么类型? 在文章的第一部分中,我们看到hack实际上是静态键入的。这意味着您必须为应用程序中的所有变量提供类型。提醒您,PHP是动态键入的,因此您永远不需要输入变量,尽管您可以将type提示用于函数参数。
- ,但是等等,这是否意味着您必须为应用程序的每个变量提供类型?不完全是,我们将查看细节。
进入严格模式就像将hack start标签从即使在严格的模式下,您也不必注释所有变量。那是因为hack足够聪明,可以推断局部变量类型。类型注释仅是类属性,函数参数和返回值所必需的。否则,我建议在可以帮助您理解您的代码的情况下注释本地变量。 让我们看一个示例:
本节的示例代码位于www/type-checker/index.php上,您可以通过将浏览器指向http:// localhost:8080/type-checker/。
来查看其输出。第一个错误消息并不奇怪:呼叫add(1,a”)会生成错误,因为add()期望第二个参数是整数。
第二个错误消息更出乎意料:通过调用add_array([1,“ a”]),不会生成错误。实际上,这是添加(1,“ a”)在add_array()内部产生错误的调用!可以预期通过[1,“ a”]会触发错误,因为它不是数组
是,HHVM运行时检查稀疏,以免影响性能:它不会迭代对象。在这一点上,您可能会质疑黑客类型系统的有用性!但是不用担心,有一个简单的答案,即“类型的检查器”:它将捕获任何类型的不匹配,包括上一个示例中的一个。不要在HHVM存储库中寻找它,它尚未由Facebook发布。
>类型检查器被实现为观察文件以进行更改的服务器。每当检测到更改时,它将扫描修改后的文件以及其依赖项中的错误。这些错误是实时报告的,因此您甚至不必运行代码。它被设计为即使在FB的尺度上也很快工作。
>您现在应该确信类型系统效果很好,但是有什么好处?它允许实时捕获开发人员错误,生成更有效的代码:PHP add()函数首先必须检查$ a和$ b的类型(即字符串,null,…)可能会转换为数字,只有这样执行加法。而使用hack上,上面的add()函数添加了两个非无效整数,这是汇编语言中非常快速的操作(由HHVM JIT生成)。
>作为开发人员,您已经在使用PHP类型提示和PHPDOC注释,则切换到严格的模式应该是不明智的。您的代码将变得更安全,更快 - 请注意,尽管不是实时的,例如审查器已经使用了类型推理来检查代码,但已有一些现有的QA工具已经使用了类型。
如果您主要使用PHP是由于其动态键入的性质,那么您可能想坚持非图案模式。
在过去几年中,PHP世界中注释的使用急剧增加。对于那些不熟悉注释的人,它们是元数据,您可以添加到类,界面,特征,变量和函数/方法/方法中。
>>该学说ORM可能是最早使用注释的PHP项目之一。以下是学说文档中模型配置的示例:
<span><span><?hh // strict </span></span><span> </span><span><span>require "/vagrant/www/xhp/php-lib/init.php"; </span></span><span> </span><span><span>// ... </span></span><span> </span><span><span>function add(int $a, int $b): int { </span></span><span> <span>return $a + $b; </span></span><span><span>} </span></span><span> </span><span><span>// ERROR(calling "add()" on l.17) : Argument 2 passed to add() must be an </span></span><span><span>// instance of int, string given </span></span><span><span>echo <p>add(1, "a") = {add(1, "a")}</p>; </span></span><span> </span><span><span>// ERROR(calling "add()" on l.22) : Argument 2 passed to add() must be an </span></span><span><span>// instance of int, string given </span></span><span><span>function add_array(array<int> $a): int { </span></span><span> <span>return array_reduce($a, "add", 0); </span></span><span><span>} </span></span><span> </span><span><span>echo <p>add_array([1, "a"]) = {add_array([1, "a"])}</p>;</span></span>
>您应该注意,毫不奇怪的是,从反射API访问了用户属性。另请注意,仍将实现对类属性注释的支持。
>本节的示例代码位于www/attributes/index.php上,您可以通过将浏览器指向http:// localhost:8080/attributes/。
来查看其输出。> xhp
到目前为止,您应该对XHP的预测有所预测,就像我们从本文的第一个代码示例中使用的那样。让我引用Facebook的更完整定义:“ XHP是PHP扩展名,它增加了语言的语法,从而使XML文档片段成为有效的PHP表达式。”。请注意,XHP可作为PHP扩展名提供,HHVM具有本机支持。>使用XHP,您可以使用
{$ hello}
在其中使用“$ hello
”的地方使用香草php。虽然上一个示例是微不足道的,但XHP还有更多提供:>它将验证您的标记,以便您无法编写无效的HTML - 想想缺少关闭标签,参数名称中的错别字
- >它提供了一定程度的上下文逃逸 - 当引擎意识到您的渲染内容时,它可以逃脱HTML并适当地属性值,以防止XSS攻击,
- >您可以通过扩展或包装现有标签来编写自己的标签。
> - 让我们看一个示例:
- 本节的完整示例代码位于www/hhxhp/index.php上,您可以通过将浏览器指向http:// localhost:8080/hhxhp/。
以上是看一下黑客,hhvm中的PHP替代品的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

JWT是一种基于JSON的开放标准,用于在各方之间安全地传输信息,主要用于身份验证和信息交换。1.JWT由Header、Payload和Signature三部分组成。2.JWT的工作原理包括生成JWT、验证JWT和解析Payload三个步骤。3.在PHP中使用JWT进行身份验证时,可以生成和验证JWT,并在高级用法中包含用户角色和权限信息。4.常见错误包括签名验证失败、令牌过期和Payload过大,调试技巧包括使用调试工具和日志记录。5.性能优化和最佳实践包括使用合适的签名算法、合理设置有效期、

会话劫持可以通过以下步骤实现:1.获取会话ID,2.使用会话ID,3.保持会话活跃。在PHP中防范会话劫持的方法包括:1.使用session_regenerate_id()函数重新生成会话ID,2.通过数据库存储会话数据,3.确保所有会话数据通过HTTPS传输。

SOLID原则在PHP开发中的应用包括:1.单一职责原则(SRP):每个类只负责一个功能。2.开闭原则(OCP):通过扩展而非修改实现变化。3.里氏替换原则(LSP):子类可替换基类而不影响程序正确性。4.接口隔离原则(ISP):使用细粒度接口避免依赖不使用的方法。5.依赖倒置原则(DIP):高低层次模块都依赖于抽象,通过依赖注入实现。

PHP8.1中的枚举功能通过定义命名常量增强了代码的清晰度和类型安全性。1)枚举可以是整数、字符串或对象,提高了代码可读性和类型安全性。2)枚举基于类,支持面向对象特性,如遍历和反射。3)枚举可用于比较和赋值,确保类型安全。4)枚举支持添加方法,实现复杂逻辑。5)严格类型检查和错误处理可避免常见错误。6)枚举减少魔法值,提升可维护性,但需注意性能优化。

在PHPStorm中如何进行CLI模式的调试?在使用PHPStorm进行开发时,有时我们需要在命令行界面(CLI)模式下调试PHP�...

如何在系统重启后自动设置unixsocket的权限每次系统重启后,我们都需要执行以下命令来修改unixsocket的权限:sudo...

静态绑定(static::)在PHP中实现晚期静态绑定(LSB),允许在静态上下文中引用调用类而非定义类。1)解析过程在运行时进行,2)在继承关系中向上查找调用类,3)可能带来性能开销。
