2025-01-01 13:31:36 | 我爱编程网
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 上关注我,以获取更多信息。
php知识框架总结
篇一:php基础知识点总结
PHP语言基础简单整理
1.开始结束标记的格式只有在没有判断语句时才能使用。
对表单传递的变量进行编码和解码:PHP中实现对查询字符串进行URL编码可以通过函数urlencode()实现,该函数的使用格式如下:string urlencode(string str);对URL编码后的查询字符串进行解码,可以通过urldecode()函数实现,该函数的使用格式如下:string urldecode(string str);
15.PHP连接数据库:
步骤: 一、建立连接------mssql_connect(server,uid,pwd);
二、指定database-------mssql_select_db(databasename);
三、执行sql------mssql_query($sql,$link);
四、处理记录集-------资源类型数据,格式:bof---数据---eof
五、以特定格式读取数据-----mssql_fetch_array()....
六、释放相关资源、关闭连接------mssql_free_result($result);mssql_close();
16.数组:php的数组由键值和value值组成
定义:$array = array("键值"=>"value","键值"=>"value","键值"=>"value");如果不给键值赋值,默认从0开始的int值
相关函数:(1)in_array("值",数组名); 返回bool型-----查看数组中是否存在某value值
(2)array_key_exists("key值",数组名); 返回bool型-----查看数组中是否存在某键值
(3)array_keys(数组名);---将数组键值返回出来形成一个新数组,此键值作为新数组的value值
(4)array_values(数组名);---将数组value值返回出来形成一个新数组,此值作为新数组的value值
(5)key(数组名);----返回当前指针指向的元素key值
(6)current(数组名);----返回当前指针指向的元素value值
(7)next(数组名);----挪动当前数组指针到下一步
(8)reset(数组名);----恢复数组指针,指向第0个元素
(9)end(数组名);----将指针挪向最后一个元素
(10)prev(数组名);----将指针向前挪动一位
(11)foreach(数组名 as $key=>$value)
{
$key是键值,$value是value值,实现数组遍历
}
(12)each(数组名);----将当前数组元素依次取出(自动挪动指针)并放到一个新的数组中
(13)array_shift(数组名);----返回数组中第一个元素值
(14)array_pop(数组名);----返回数组最后一个元素值
(15)array_push(数组名,value);----向数组中追加元素
(16)array_unshift(数组名,value);----在数组最前面添加元素
(17)array_pad(数组名,数组长度,value);----向数组中追加多个元素,对数组副本操作,不改变原数组,返回一个新数组
(18)count();----返回个数
(19)array_unique(数组名);----去掉数组中重复部分,操作数组副本,不改变原数组,返回新数组
(20)sort(数组名);----从小到大升序排列数组value值,一般针对int型value值,返回bool型,成功返回true
(21)rsort(数组名);----从大到小,逆序排列数组value值
(22)array_combine(数组1,数组2);----将数组1的value值作为key,数组2的value值作为value值,形成一个新数组
(23)array_merge(数组1,数组2,数组3...);----合并多个数组,将多个数组value值依次合并,合为一个数组
(24)array_slice(数组名,int,int);----从目标数组截取元素,形成一个新数组。开始位置为第二个参数,结束位置为第三个参数。若第三个参数不写,则默认是截取到最后。
(25)array_splice();----用法同array_slice();但是其截取部分从原数组中删除
(26)explode("字符依据",目标字符串);----将字符串按照一定的依据拆分成数组
(27)implode("字符依据",目标数组);----将数组元素按照依据组合成一个字符串
(28)range(mixed low,mixed high[number step]);----生成数组,例:range(1,100,8);---即从1到100,每8位取一个数,组成一个数组
(29)shuffle(数组名);----用于将数组进行随机排序
(30)array_sum(数组名);----对数值型数组元素值进行求和
(31)array_chunk(数组名,int);----分割目标数组,返回一个新数组,其中数组的每个元素都是一个一维数组,int参数为分割成的一维数组的长度
17.Cookie和会话控制:
Cookie是在HTTP协议下,服务器或脚本可以维护客户工作站上信息的一种方式。Cookie是由Web服务器保存在客户机上的小文本文件,它可以包含有关用户的信息。无论何时用户链接到服务器,Web站点都可以访问Cookie信息。
存在server端的是session,存在client端的是cookie,它们用来存储全局变量。 设定Cookie值:setcookie("名","值");
通过Cookie数组取值:$_cookie["名"];
设置生成期:setcookie("名","值",time()+1800);生成期为当前时间加1800秒之后。
删除cookie: setcookie("名","",time()-3600);中间值设置为空,并将当前时间减去3600秒。 Cookie数组:setcookie("名[key]","值"); 使用foreach读取。
在PHP中可以通过$_COOKIE预定义变量访问Cookie的值。如果设置了php.ini中的register_long_arrays,那么就能够应用$_COOKIE和$HTTP_COOKIE_VARS;如果在php.ini中还设置了register_globals,那么就可以在PHP中作为全局变量使用各个Cookie值。但是,更改php.ini中的两个文件设置,容易对PHP的安全构成威胁,不推荐使用该方法,建议使用更新的$_COOKIE。
会话ID的传送
会话ID的传送有两种方式,一种是Cookie方式,另一种是URL方式。
Cookie传送方式:
这是最简单的会话方式,但是有些客户可能限制使用Cookie,如果客户限制使用Cookie的条件下,仍要继续工作,那就要通过其他方式来实现了。
URL传送方式:
在该方式中,URL本身用来传送会话,会话标志被简单地附加到URL的尾部,或者作为窗体中的一个变量来传递。例:
我爱编程网(https://www.52biancheng.com)小编还为大家带来编写函数,用指针法求某指针指向的数组中10个元素的最大值和最小值,并存入另外两个指针变量指向的变量的相关内容。
#include "stdio.h"
#include <stdlib.h>
#include "time.h"
#define N 10
void maxmin(int *p, int *pmax, int *pmin){
int i;
for(*pmax=*pmin=p[i=0];i<N;i++){
if(p[i]>*pmax)
*pmax=p[i];
if(p[i]<*pmin)
*pmin=p[i];
}
}
int main(int argc,char *argv[]){
int array[N],i,max,min;
srand((unsigned)time(NULL));
for(i=0;i<N;printf("%d ",array[i++]=rand()%100));
printf("\n");
maxmin(array,&max,&min);
printf("MAX = %d\nMIN = %d\n",max,min);
return 0;
}
运行样例:
以上就是我爱编程网小编给大家带来的一文看懂 PHP 7.3 更新 编写函数,用指针法求某指针指向的数组中10个元素的最大值和最小值,并存入另外两个指针变量指向的变量,希望能对大家有所帮助。更多相关文章关注我爱编程网:www.52biancheng.comPHP文件指针按行定位你知道文件不是以“行”为单位进行存储的,所以fssek不能定位行。需要定位行,可以用fgets()函数:<?php$fp=fopen("example.txt","r");$line_num=0;while($line=fgets($fp)){$line_num++;if($line_num==100){//现在到100行了ec
PHP用到的C语言中的“指针”多吗?php没有指针的概念.=============如果学习PHP的话还有没有必要学习“指针”“结构体共同体”“编译预处理”等知识点?================单从php来说,的确是用不上.但是既然都学习了前面几章,何不顺带看一下呢.即使PHP中没有指针概念,但你要理解了指针概念,对PHP的引用概念搏侍就很容易理解了.编译预算处理
用PHP定义一个函数,返回3个参数中的最大值?可以使用以下代码定义一个函数,返回3个参数中的最大值:functionfindMax($num1,$num2,$num3){$max=$num1;if($num2>$max){$max=$num2;}if($num3>$max){$max=$num3;}return$max;}该函数接受3个
PHP处理数组常用的几个函数一、数组操作的基本函数数组的键名和值array_values($arr);获得数组的值array_keys($arr);获得数组的键名array_flip($arr);数组中的值与键名互换(如果有重复前面的会被后面的覆盖)in_array("apple",$arr);在数组中检索applearray_search("apple",$arr)
PHP函数不支持的功能有PHP函数不支持的功能:可变的函数名称;通过指针传递参数。php函数简介:任何有效的php代码都有可能出现在函数内部,甚至包括其它函数和类定义。创建PHP函数:函数是通过调用函数来执行的。PHP函数准则:函数的名称应该提示出它的功能;函数名称以字母或下划线开头,不能以数字开头。一文看懂PHP7.3更新PHP目前依然作为竞争激烈的脚本语言
PHPFilesystemPHPFilesystem常量在PHP中,有一些内置的常量,它们对于文件和目录操作至关重要。这些常量在不同版本的PHP中提供支持,用来控制文件系统的特定行为。以下是一些关键的PHPFilesystem常量及其功能描述:PHPGLOB_BRACE:用于在glob()函数中表示通配符的花括号({}),例如`{*.{txt,php}}`,这将匹配所有以"
PHP如何取二维数组中的某列的最大值和最小值?需要准备的材料分别是:电脑、php编辑器、浏览器。1、首先,打开php编辑器,新建php文件,例如:index.php,定义一个二维数组,以取第2列的最值为例。2、在index.php中,输入代码:$a=[[11,5,24,8,3],[3,54,78,64,9],];echo'max='.max($a[1]).
PHP8中查询数组中指定元素-PHP8知识详解PHP是广泛应用的web编程语言,数组作为数据集合在程序开发中经常使用。在操作数组时,有时需要查询数组中是否有特定元素。以下几种方法在PHP8中用于查询数组中的指定元素:1.使用`array_search()`函数查询数组元素。若存在,返回该元素的键名;若不存在,返回`false`。示例代码如下:在PHP8环境运行此代码后,若找
2025-02-01 20:24:39
2025-02-10 15:19:48
2025-01-28 17:58:32
2024-01-05 14:11:24
2024-11-22 05:08:01
2024-09-10 08:50:00