2025-03-15 03:36:43 | 我爱编程网
PHP 目前依然作为竞争激烈的脚本语言之一,这主要归功于其核心维护团队的快速更新。
自从 PHP 7.0 的发布,社区见证了新特性的诞生,极大地改进了开发者在项目中使用 PHP 的方式。这些改进的主要目的包括提高 PHP 应用的性能和安全性。
PHP 最近实现了又一个里程碑,发布了 PHP 7.3 版本,新版本带来了许多急需的更新。
本文将探讨新发布的 PHP 7.3 特性和更新。好消息是,你可以在测试服务器上自行安装新版本并查看新功能。但要记住,切勿在生产服务器上使用 RC 版本更新,这可能会破坏已经上线的应用。
以下是 PHP 7.3 中引入的一些更新,与之前的版本相比,它们大大提高了 PHP 7.3 的性能。
接下来,我们将逐一讨论这些更新。
灵活的 Heredoc 和 Nowdoc 语法
Heredoc 和 Nowdoc 语法在使用多行长字符串时非常有用。它们要求结束标识符应该出现在新行的第一个字符串。
此更新提出了以下两项改进:
函数调用中允许尾部逗号
在参数、元素、变量列表结尾,追加尾部逗号。有时我们在数组内以及函数调用(特别是可变参函数)时需要传递大量元素,若遗漏一个逗号,便会报错。基于此情况,尾部逗号便显得十分有用。这个特性已经在数组内使用,并且从 PHP 7.2 开始,分组命名空间(Grouped Namespaces)语法也开始支持尾部逗号。
当新值需要被追加于此处时,尾部逗号便显得十分实用。在可变参函数例如 unset() 内,更是如此。
当你使用 compact() 函数给模板引擎传递一批变量时,也是能用到的例子。
在某些需要构造连续或分组数据情况下,经常要使用 array_merge() 函数合并数组。也可以利用尾部逗号:
JSON_THROW_ON_ERROR
解析 JSON 响应数据,有 json_encode() 以及 json_decode() 两个函数可供使用。不幸的是,它们都没有恰当的错误抛出表现。json_encode 失败时仅会返回 false;json_decode 失败时则会返回 null,而 null 可作为合法的 JSON 数值。唯一获取错误的方法是,调用 json_last_error() 或 json_last_error_msg(),它们将分别返回机器可读和人类可读的全局错误状态。
该 RFC 提出的解决方案是,为 JSON 函数新增 JSON_THROW_ON_ERROR 常量用于忽略全局错误状态。当错误发生时,JSON 函数将会抛出 JsonException 异常,异常消息(message)为 json_last_error() 的返回值,异常代码(code)为 json_last_error_msg() 的返回值。
升级 PCRE2
PHP 使用 PCRE 作为正则表达式引擎。但从 PHP 7.3 开始,PCRE2 将作为新的正则引擎大显身手。因此,你需要将现有的正则表达式迁移到符合 PCRE2 的规则。这些规则比以前更具侵入性。以下是实例:
这个表达式在新版 PHP 内将会匹配失败且不会触发警告。因为 PCRE2 现严格要求,若需匹配连字符(-)而非用于表示范围,则必须移动到末尾或将其转义。
更新到 PCRE2 10.x 后,支持了以下以及更多特性:
list() 赋值引用
PHP 中的 list() 现在可以赋值给引用,在当前版本中 list() 中赋值不能使用引用,在 PHP 7.3 中将允许使用引用,新改进的语法如下:
is_countable 函数
在 PHP 7.2 中,使用 count() 获取对象和数组的数量。如果对象不可数,PHP 会抛出警告⚠️。所以需要检查对象或者数组是否可数。PHP 7.3 提供新的函数 is_countable() 来解决这个问题。
该 RFC 提供新的函数 is_countable(),对数组类型或者实现了 Countable 接口的实例的变量返回 true。
array_key_first(), array_key_last()
当前版本的 PHP 允许使用 reset() ,end() 和 key() 等方法,通过改变数组的内部指针来获取数组首尾的键和值。现在,为了避免这种内部干扰,PHP 7.3 推出了新的函数来解决这个问题:
让我们看一个例子:
Argon2 和 Hash 密码加密性能增强
在 PHP 的早期版本中,我们增加了 Argon2 和哈希密码加密算法,这是一种使用哈希加密算法来保护密码的现代算法。它有三种不同的类型,Argon2i、Argon2d 和 Argon 2id。我们针对 Argon2i 密码散列和基于密码的密钥生成进行了优化。Argon2d 性能更快,并使用依赖于内存的数据访问。Argon2i 使用与内存无关的数据访问。Argon2id 是 Argon2i 和 Argon2d 的混合体,使用依赖于数据和与数据独立的存储器访问的组合。
废弃并移除 image2wbmp()
该函数能够将图像输出为 WBMP 格式。另一个名为 imagewbmp() 的函数也同样具备单色转换的作用。因此,出于重复原因, image2wbmp() 现已被废弃,你可使用 imagewbmp() 代替它。此函数被弃用后,再次调用它将会触发已弃用警告。待后续此函数被移除后,再次调用它将会触发致命错误。
废弃并移除大小写不敏感的常量
使用先前版本的 PHP,你可以同时使用大小写敏感和大小写不敏感的常量。但大小写不敏感的常量在使用中会造成一点麻烦。所以,为了解决这个问题,PHP 7.3 废弃了大小写不敏感的常量。
同站点 Cookie
PHP 7.3 在建议在使用 cookies 时,增加同站点标志。这个 RFC 影响了四个系统函数。
这个影响会在两种情况下起作用。其中一种方式会添加函数的新参数,另一种方式允许以数组形式的选项代替其他单独选项。
FPM 更新
FastCGI 进程管理器也进行了更新,现在提供了新的方式来记录 FPM 日志。
log_limit: 设置允许的日志长度,可以超过 1024 字符。
log_buffering: 允许不需要额外缓冲去操作日志。
decorate _workers_output: 当启用了 catch_workers_output 时,系统会去禁用渲染输出。
改进 Windows 下的文件删除
如官方文档所述:
默认情况下,文件描述符以共享读、写、删除的方式去操作。这很有效的去映射 POSIX 并允许去删除正在使用中的文件。但这并不是100%都是一样的,不同的平台可能仍存在一些差异。删除操作之后,文件目录仍存在直到所有的文件操作被关闭。
总结,PHP 7.3 引入了多个功能改进,提高了性能,增加了新特性和更新,同时也废弃了一些旧功能。这些更新都可以在 php.net 网站上找到,并已经合并到主分支上了。你现在就可以在自己的服务器上使用这些新功能,也可以查阅官方 RFC 页面获取每个详细版本。如果你对新版 PHP 7.3 有任何问题,可以在评论下写下自己的想法。如果你喜欢这篇文章,并觉得它很有帮助,可以在 Twitter 上关注我,以获取更多信息。
我爱编程网(https://www.52biancheng.com)小编还为大家带来16 个 PHP 开发者必知必会的魔术方法的相关内容。
在 PHP 中,魔术方法以双下划线(__)开头,发挥着关键作用。这些方法包括:
1. __construct() :在创建对象时自动调用,用于执行初始化操作,例如为成员变量赋值。实例展示了无参、单参和多参创建对象。
2. __destruct() :在对象销毁前调用,允许执行清理工作,如关闭文件或释放资源。声明与构造方法类似,不接受参数。
3. __call() :在调用未定义方法时被调用,接收方法名和参数数组。通过示例展示了其使用方法。
4. __callStatic() :在调用静态方法时被自动调用,作用类似 __call()。示例展示了其应用。
5. __get() :当尝试访问私有属性时,用于安全获取属性值。实例演示了其功能。
6. __set() :用于设置私有属性,传递属性名和值。展示代码展示了其使用。
7. __isset() :用于检查私有属性是否设置,确保代码的健壮性。通过示例说明了其用途。
8. __unset() :与 __isset() 类似,用于处理未定义或不可访问属性的解除设置。
9. __sleep() :用于在序列化前指定需要序列化的属性,避免不必要的数据存储。提供了序列化示例。
10. __wakeup() :在对象反序列化时调用,用于执行初始化或重建连接等操作。
11. __toString() :用于对象被直接打印时,返回一个字符串值。展示了实例和未定义时的错误。
12. __invoke() :允许对象以函数方式调用,仅在 PHP 5.3.0 及以上版本可用。提供了相关示例。 我爱编程网
13. __set_state() :用于导出类代码时自动调用,接收属性值数组。展示了实例和定义情况。
14. __clone() :在对象克隆时调用,用于修改属性值,提供示例代码。
15. __autoload() :自动加载未定义的类,简化了类文件的管理。展示了其工作原理。
16. __debugInfo() :当执行 var_dump() 时被调用,用于生成调试信息。提供了示例。
总结,PHP 魔术方法提供了强大的功能,包括对象的创建、销毁、方法调用、属性访问与设置、序列化与反序列化、打印对象、函数式调用等,极大地丰富了 PHP 的应用。
以上就是我爱编程网小编为大家带来的内容了,想要了解更多相关信息,请关注我爱编程网。更多相关文章关注我爱编程网:www.52biancheng.compython不支持的数据类型是什么?python不支持的数据类型是char、byte类型。Python没有char或byte类型来保存单一字符或8比特整数。你可以使用长度为1的字符串表示字符或8比特整数。python的数据类型有:数字(int)、浮点(float)、字符串(str),列表(pst)、元组(tuple)、字典(dict)、集合(set)。
PHP语言有哪些主要数据类型?PHP支持8种基本的数据类型。一:四种标量类型:1、boolean(布尔型)2、integer(整型)3、float(浮点型,也称作double)4、string(字符串)二:两种复合类型:1、array(数组)2、object(对象)三:两种特殊类型:1、resource(资源)2、NULL(
int和%在python语言中有什么作用?有哪些不同?int在python里是一个类,表示是整形,比如1,2,3这些在python里都是int形。你可以直接a=1,这时候a就是int形的变量;也可以s=int(1),这个和上面的效果是一样的。在屏幕输出的命令中,%是格式符号,%d代表整数,%s代表字符单独看%,是一个运算符号,求余数1%5=1,2%5=2,3%5=3,
PHP与C语言的语法有什么不同PHP与C语言的语法有什么不同?PHP的基本语法和C是很相似的,可以说大部分编程语言的基本语法都是如出一辙的:顺序、选择(if)、循环(while)。不同之处有变量定义,还有实现的具体细节。但是,php主要是部署网站用的,所以大部分时候是要嵌在HTML语言里面的,并且与JS混合在一起,所以表面看上去很乱,远远没有C语言的单纯。以上是对格式方面的理
PHP按照选择执行函数的请教两个函数完全可以写成一个函数:function del( $t = 1 ) { if ( $t == 1 ) { //函数参数是1 //删除图片 } else { //否则 // 删除路径 } } //接下来是函数的调用$T = $_GET['t']; //取得url的get参数del( $T ); //调用函数然后在按钮方面
PHP直接调用函数和调用另外一个文件中的函数的区别//如果是PHP文件中的函数,唯一的区别是:先引入外部文件,然后直接调用。//如果是外部类文件中的函数,需要引入,然后new 对象后,再调用该对象的函数。$msg=test_msg();function test_msg(){echo "";}//调用外部文件中的函数//首先引入文件include_once 'file.php';$msg=t
php中执行sql查询的语句为什么执行不了?$sql="select*fromuserwherename=$nameandpassword=$password";你先在在这条下边输出echo$sql;看下这条sql语句输出的结果是否正确,然后再调试。不成功,很有可能是由于你的变量输出有问题。php中sql语句好像没有效果,求助你的代码逻辑有问题.在表单subm
php常用bc函数探索PHP中的强大计算工具:bc函数集在PHP的世界里,bcadd就像是一位精密的计算器,它为我们提供了两个任意精度数字之间无比精准的加法运算,无论是微小的数字还是天文数字,都能轻松应对。bcsub则扮演着减法专家的角色,确保每一个细微的减法操作都能得到准确的结果,无论是商业计算还是科学计算,它都能胜任有余。乘法任务就交给bc
2024-01-05 14:11:24
2025-02-01 20:24:39
2024-02-21 12:26:18
2025-02-12 03:21:37
2025-02-10 15:19:48
2025-01-28 17:58:32