PHP5各个版本的新功能和新特性总结.docx
- 文档编号:1370292
- 上传时间:2022-10-21
- 格式:DOCX
- 页数:18
- 大小:23.98KB
PHP5各个版本的新功能和新特性总结.docx
《PHP5各个版本的新功能和新特性总结.docx》由会员分享,可在线阅读,更多相关《PHP5各个版本的新功能和新特性总结.docx(18页珍藏版)》请在冰豆网上搜索。
PHP5各个版本的新功能和新特性总结
因为PHP那“集百家之长”的蛋疼语法,加上社区氛围不好,很多人对新版本,新特征并无兴趣。
本文将会介绍自PHP5.2起,直至PHP5.6中增加的新特征
本文目录:
PHP5.2以前:
autoload,PDO和MySQLi,类型约束
PHP5.2:
JSON支持
PHP5.3:
弃用的功能,匿名函数,新增魔术方法,命名空间,后期静态绑定,Heredoc和Nowdoc,const,三元运算符,Phar
PHP5.4:
ShortOpenTag,数组简写形式,Traits,内置Web服务器,细节修改
PHP5.5:
yield,list()用于foreach,细节修改
PHP5.6:
常量增强,可变函数参数,命名空间增强
一、PHP5.2以前(2006前)
顺便介绍一下PHP5.2已经出现但值得介绍的特征。
autoload
大家可能都知道__autoload()函数,如果定义了该函数,那么当在代码中使用一个未定义的类的时候,该函数就会被调用,你可以在该函数中加载相应的类实现文件,如:
代码如下:
function__autoload($classname)
{
require_once("{$classname}.php")
}
但该函数已经不被建议使用,原因是一个项目中仅能有一个这样的__autoload()函数,因为PHP不允许函数重名。
但当你使用一些类库的时候,难免会出现多个autoload函数的需要,于是spl_autoload_register()取而代之:
复制代码代码如下:
spl_autoload_register(function($classname)
{
require_once("{$classname}.php")
});
spl_autoload_register()会将一个函数注册到autoload函数列表中,当出现未定义的类的时候,SPL[注]会按照注册的倒序逐个调用被注册的autoload函数,这意味着你可以使用spl_autoload_register()注册多个autoload函数.
注:
SPL:
StandardPHPLibrary,标准PHP库,被设计用来解决一些经典问题(如数据结构).
PDO和MySQLi
即PHPDataObject,PHP数据对象,这是PHP的新式数据库访问接口。
按照传统的风格,访问MySQL数据库应该是这样子:
代码如下:
//连接到服务器,选择数据库
$conn=mysql_connect("localhost","user","password");
mysql_select_db("database");
//执行SQL查询
$type=$_POST['type'];
$sql="SELECT*FROM`table`WHERE`type`={$type}";
$result=mysql_query($sql);
//打印结果
while($row=mysql_fetch_array($result,MYSQL_ASSOC))
{
foreach($rowas$k=>$v)
print"{$k}:
{$v}n";
}
//释放结果集,关闭连接
mysql_free_result($result);
mysql_close($conn);
为了能够让代码实现数据库无关,即一段代码同时适用于多种数据库(例如以上代码仅仅适用于MySQL),PHP官方设计了PDO.
除此之外,PDO还提供了更多功能,比如:
1.面向对象风格的接口
2.SQL预编译(prepare),占位符语法
3.更高的执行效率,作为官方推荐,有特别的性能优化
4.支持大部分SQL数据库,更换数据库无需改动代码
上面的代码用PDO实现将会是这样:
代码如下:
//连接到数据库
$conn=newPDO("mysql:
host=localhost;dbname=database","user","password");
//预编译SQL,绑定参数
$query=$conn->prepare("SELECT*FROM`table`WHERE`type`=:
type");
$query->bindParam("type",$_POST['type']);
//执行查询并打印结果
foreach($query->execute()as$row)
{
foreach($rowas$k=>$v)
print"{$k}:
{$v}n";
}
PDO是官方推荐的,更为通用的数据库访问方式,如果你没有特殊需求,那么你最好学习和使用PDO.
但如果你需要使用MySQL所特有的高级功能,那么你可能需要尝试一下MySQLi,因为PDO为了能够同时在多种数据库上使用,不会包含那些MySQL独有的功能。
MySQLi是MySQL的增强接口,同时提供面向过程和面向对象接口,也是目前推荐的MySQL驱动,旧的C风格MySQL接口将会在今后被默认关闭。
MySQLi的用法和以上两段代码相比,没有太多新概念,在此不再给出示例,可以参见PHP官网文档[注]。
注:
类型约束
通过类型约束可以限制参数的类型,不过这一机制并不完善,目前仅适用于类和callable(可执行类型)以及array(数组),不适用于string和int.
代码如下:
//限制第一个参数为MyClass,第二个参数为可执行类型,第三个参数为数组
functionMyFunction(MyClass$a,callable$b,array$c)
{
//...
}
PHP5.2(2006-2011):
JSON支持
包括),)等函数,JSON算是在Web领域非常常用的数据交换格式,可以被JS直接支持,JSON实际上是JS语法的一部分。
JSON系列函数,可以将PHP中的数组结构与JSON字符串进行转换:
代码如下:
$array=["key"=>"value","array"=>[1,2,3,4]];
$json=$array);
echo"{$json}n";
$object=$json);
print_r($object);
输出:
代码如下:
{"key":
"value","array":
[1,2,3,4]}
stdClassObject
(
[key]=>value
[array]=>Array
(
[0]=>1
[1]=>2
[2]=>3
[3]=>4
)
)
值得注意的是)默认会返回一个对象而非数组,如果需要返回数组需要将第二个参数设置为true.
PHP5.3(2009-2012)
PHP5.3算是一个非常大的更新,新增了大量新特征,同时也做了一些不向下兼容的修改。
【PHP5.3弃用的功能】:
以下几个功能被弃用,若在配置文件中启用,则PHP会在运行时发出警告。
RegisterGlobals
这是php.ini中的一个选项(register_globals),开启后会将所有表单变量($_GET和$_POST)注册为全局变量.
看下面的例子:
代码如下:
if(isAuth())
$authorized=true;
if($authorized)
include("page.php");
这段代码在通过验证时,将$authorized设置为true.然后根据$authorized的值来决定是否显示页面.
但由于并没有事先把$authorized初始化为false,当register_globals打开时,可能访问/auth.php?
authorized=1来定义该变量值,绕过身份验证。
该特征属于历史遗留问题,在PHP4.2中被默认关闭,在PHP5.4中被移除。
MagicQuotes
对应php.ini中的选项magic_quotes_gpc,这个特征同样属于历史遗留问题,已经在PHP5.4中移除。
该特征会将所有用户输入进行转义,这看上去不错,在第一章我们提到过要对用户输入进行转义。
但是PHP并不知道哪些输入会进入SQL,哪些输入会进入Shell,哪些输入会被显示为HTML,所以很多时候这种转义会引起混乱。
SafeMode
很多虚拟主机提供商使用SafeMode来隔离多个用户,但SafeMode存在诸多问题,例如某些扩展并不按照SafeMode来进行权限控制。
PHP官方推荐使用操作系统的机制来进行权限隔离,让Web服务器以不同的用户权限来运行PHP解释器,请参见第一章中的最小权限原则.
【PHP5.3的新增、改进】
匿名函数
也叫闭包(Closures),经常被用来临时性地创建一个无名函数,用于回调函数等用途。
代码如下:
$func=function($arg)
{
print$arg;
};
$func("HelloWorld");
以上代码定义了一个匿名函数,并赋值给了$func.
可以看到定义匿名函数依旧使用function关键字,只不过省略了函数名,直接是参数列表。
然后我们又调用了$func所储存的匿名函数。
匿名函数还可以用use关键字来捕捉外部变量:
复制代码代码如下:
functionarrayPlus($array,$num)
{
array_walk($array,function(&$v)use($num){
$v+=$num;
});
}
上面的代码定义了一个arrayPlus()函数(这不是匿名函数),它会将一个数组($array)中的每一项,加上一个指定的数字($num).
在arrayPlus()的实现中,我们使用了array_walk()函数,它会为一个数组的每一项执行一个回调函数,即我们定义的匿名函数。
在匿名函数的参数列表后,我们用use关键字将匿名函数外的$num捕捉到了函数内,以便知道到底应该加上多少。
魔术方法:
__invoke(),__callStatic()
PHP的面向对象体系中,提供了若干“魔术方法”,用于实现类似其他语言中的“重载”,如在访问不存在的属性、方法时触发某个魔术方法。
随着匿名函数的加入,PHP引入了一个
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- PHP5 各个 版本 新功能 特性 总结
![提示](https://static.bdocx.com/images/bang_tan.gif)