博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP5.4新特性
阅读量:6293 次
发布时间:2019-06-22

本文共 3555 字,大约阅读时间需要 11 分钟。

PHP5.4 此次更新的关键新特性,包括:新增traits,更精简的Array数组语法,供测试使用的内建webserver,可以闭包使用的$this指针,实例化类成员访问,

PHP 5.4.0 性能大幅提升, 修复超过100个bug. 废除了register_globals, magic_quotes以及安全模式。 另外值得一提的是多字节支持已经默认启用了,default_charset从ISO-8859-1已经变为UTF-8. 默认发送“Content-Type: text/html; charset=utf-8”,你再也不需要在HTML里写meta tag,也无需为UTF-8兼容而传送额外的header了。

Traits

Traits (横向重用/多重继承)是一组结构很像“类”(但不能实例化)的方法,它可以让开发人员在不同的类中轻松地重用方法。 PHP为单继承语言,子类只能继承一个父类,于是Traits来了。

1、Traits的最佳应用是多类之间可以共享相同的函数。打个比方,我们要做个网站,需要使用Facebook和Twitter的APIs。我们要建 2个类,如果是以前,我们需要写一个cURL的方法并且复制/粘贴到两个类中。现在不用了,使用Traits重用代码吧,这次真正地遵循了 DRY(Don’t Repeat Yourself)原则。

/** cURL wrapper trait */trait cURL{
public function curl($url) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $output = curl_exec($ch); curl_close($ch); return $output; }}/** Twitter API Class */class Twitter_API{ use cURL; // use trait here public function get($url) { return json_decode($this->curl('http://api.twitter.com/'.$url)); }}/** Facebook API Class */class Facebook_API{ use cURL; // and here public function get($url) { return json_decode($this->curl('http://graph.facebook.com/'.$url)); }}$facebook = new Facebook_API();echo $facebook->get('500058753')->name; // Rasmus Lerdorf/** Now demonstrating the awesomeness of PHP 5.4 syntax */echo (new Facebook_API)->get('500058753')->name;$foo = 'get';echo (new Facebook_API)->$foo('500058753')->name;echo (new Twitter_API)->get('1/users/show.json?screen_name=rasmus')->name;

看明白了吗?没有?那你来瞅瞅更简单的例子

2、优先级:当前类中的方法会覆盖 Trait 方法,而Trait方法覆盖了基类中的方法。

sayHello();//output Hello Universe!?>

3、多个Traits,使用use声明列出多个Traits。

sayHello();$o->sayWorld();$o->sayExclamationMark();//output Hello World!?>

4、冲突的解决:为了解决两个 Traits 在同一个类中的命名冲突,需要使用 insteadof 操作符来明确指定冲突方法中的一个。由于这仅允许排除一个方法as 操作符可以将冲突的方法以另一个名称来引入。

?>

以上的smallTalk()都会输出b,bigTalk()会输出A。

5、修改方法可见性:使用的类可以通过 as 语法来调整方法的可见性

6、Traits组:其他 traits 也能够使用 traits,正如类能够使用 traits。 在 trait 定义时通过使用一个或多个 trait,它能够组合其他 traits 中的部分或全部成员。

sayHello();$o->sayWorld();?>

上面会输出Hello world!

7、抽象成员:为了对使用的类施加强制要求,Trait 支持抽象方法的使用。

getWorld(); } abstract public function getWorld();}class MyHelloWorld { private $world; use Hello; public function getWorld() { return $this->world; } public function setWorld($val) { $this->world = $val; }}?>

8、Traits静态成员:静态变量可以被 trait 的方法引用,但不能被 trait 定义。但是 traits 能够为使用的类定义静态方法。

Example #9 静态变量

inc(); // echo 1$p = new C2(); $p->inc(); // echo 1?>

Example #10 静态方法

9、属性:如果 trait 定义了一个属性,那类将不能定义同样名称的属性,否则会产生一个错误。 如果类的定义是兼容的(同样的可见性和初始值)则错误的级别是 E_STRICT,否则是一个致命错误。

x;?>

下面的例子出现了冲突

Buid-in web server

PHP5.4内置了一个简单的Web服务器,这样在做一些简单程序就方便多了,省去了环境配置的工作,特别对于初学者来说。

把当前目录作为Root Document只需要这条命令即可:

$ php -S localhost:3300

也可以指定其它路径:

$ php -S localhost:3300 -t /path/to/root

还可以指定路由:

$ php -S localhost:3300 router.php

Short array syntax

PHP5.4提供了数组简短语法:

$arr = [1,'james', 'james@fwso.cn'];

Array dereferencing

这个可是个好东西, 有了Array dereferencing, 以前的这种写法就再也不必要了:

 

$arr = myfunc();echo $arr[1];

 

在PHP5.4中这样就行了:

echo myfunc()[1];

Upload progress

Session提供了上传进度支持,通过$_SESSION["upload_progress_name"]就可以获得当前文件上传的进度信息,结合Ajax就能很容易实现上传进度条了。

参考:

 

JsonSerializable Interface

实现了JsonSerializable接口的类的实例在json_encode序列化的之前会调用jsonSerialize方法,而不是直接序列化对象的属性。
参考:

Use mysqlnd by default

现在mysql, mysqli, pdo_mysql默认使用mysqlnd本地库,在PHP5.4以前需要:

$./configure --with-mysqli=mysqlnd

现在

$./configure --with-mysqli

完成。

 

转载于:https://www.cnblogs.com/zl0372/p/php_30.html

你可能感兴趣的文章
dojo.mixin(混合进)、dojo.extend、dojo.declare
查看>>
Python 数据类型
查看>>
iOS--环信集成并修改头像和昵称(需要自己的服务器)
查看>>
PHP版微信权限验证配置,音频文件下载,FFmpeg转码,上传OSS和删除转存服务器本地文件...
查看>>
教程前言 - 回归宣言
查看>>
PHP 7.1是否支持操作符重载?
查看>>
Vue.js 中v-for和v-if一起使用,来判断select中的option为选中项
查看>>
Java中AES加密解密以及签名校验
查看>>
定义内部类 继承 AsyncTask 来实现异步网络请求
查看>>
VC中怎么读取.txt文件
查看>>
如何清理mac系统垃圾
查看>>
企业中最佳虚拟机软件应用程序—Parallels Deskto
查看>>
Nginx配置文件详细说明
查看>>
怎么用Navicat Premium图标编辑器创建表
查看>>
Spring配置文件(2)配置方式
查看>>
MariaDB/Mysql 批量插入 批量更新
查看>>
ItelliJ IDEA开发工具使用—创建一个web项目
查看>>
solr-4.10.4部署到tomcat6
查看>>
切片键(Shard Keys)
查看>>
淘宝API-类目
查看>>