关于 PHP 5.4 你所需要知道的
PHP 5.4来了,这是自5.3后的又一次主版本升级。此次升级改动较为显著,删除了一些过气儿的函数,带来了高达20%的速度提升和更少的内存使用。
新特性与改动
此次更新的关键新特性,包括:新增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来了。
Traits的最佳应用是多类之间可以共享相同的函数。打个比方,我们要做个网站,需要使用Facebook和Twitter的APIs。我们要建 2个类,如果是以前,我们需要写一个cURL的方法并且复制/粘贴到两个类中。现在不用了,使用Traits重用代码吧,这次真正地遵循了 DRY(Don’t Repeat Yourself)原则。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
/** 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;
|
看明白了吗?没有?那你来瞅瞅更简单的例子
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
trait Hello
{
public function hello()
{
return 'Hello' ;
}
}
trait Cichui
{
public function cichui()
{
return ' cichui' ;
}
}
class HelloCichui
{
use Hello, Cichui;
public function the_end()
{
return '!' ;
}
}
$o = new HelloCichui;
echo $o->hello(), $o->cichui(), $o->the_end();
echo ( new Hello)->hello(), ( new Cichui)->cichui(), ( new HelloCichui)->the_end();
|
内建的Web-Sever
在Web开发中,Apache HTTPD是PHP的最佳拍档。有时,你开发时用不上需要配置httpd.conf的apache大杀器,而只需要一个可以在命令行中使用的超小型 Webserver. 感谢PHP(先感谢国家),PHP 5.4这次内建了CLI Web server。(PHP CLI webserver仅供开发使用,谢绝产品用途)
举个栗子(windows平台):
步骤一:建立web根目录, Router和Index
在硬盘根目录(比如C盘)建立一个public_html目录,目录里新建一个router.php文件,把以下代码复制粘贴进去:
1
2
3
4
5
6
7
8
9
10
11
|
<?php
// router.php
if (preg_match( '#\.php$#' , $_SERVER [ 'REQUEST_URI' ]))
{
require basename ( $_SERVER [ 'REQUEST_URI' ]); // serve php file
}
else if ( strpos ( $_SERVER [ 'REQUEST_URI' ], '.' ) !== false)
{
return false; // serve file as-is
}
?>
|
再来新建一个index.php文件,复制粘贴以下代码:
1
2
3
4
|
<?php
// index.php
echo 'Hello cichui.com Readers!' ;
?>
|
编辑你的php.ini文件,找到”include_path”一行,把c:\public_html添加进去(分号分隔):
1
|
include_path = ".;C:\php\PEAR;C:\public_html"
|
存盘退出,看下一步
步骤二:运行Web-Server
切换到php的安装目录,敲下最关键的命令—运行Web-server
php -S 0.0.0.0:8080 -t C:\public_html router.php
开始了吗?不要关闭窗口,如果进程关闭Web server也跟着关闭了。
打开浏览器:访问http://localhost:8080/index.php吧,
Hello cichui.com Readers!
看到了吧?对,就是这个!
提示1:你可以考虑自建一个php-server.bat的批处理,扔到桌面上以后就可以双击启动了。
提示2:使用0.0.0.0而不是localhost,可以保证外网不会访问到你的web serve。
精简的Array数组语法
PHP 5.4为您奉上精简的array数组语法:
1
2
3
4
5
6
7
8
9
10
|
$fruits = array ( 'apples' , 'oranges' , 'bananas' ); // "old" way
// 学Javascript的数组了
$fruits = [ 'apples' , 'oranges' , 'bananas' ];
// 关联数组
$array = [
'foo' => 'bar' ,
'bar' => 'foo'
];
|
当然,旧语法依旧有效,我们多了一种选择。
数组成员访问解析(Array dereferencing*)
处理数组再也不需要临时变量了。
假设我们需要获取Fang Bin Xin的middle name,
echo explode(‘ ‘, ‘Fang Bin Xin’)[1]; // Bin
PHP 5.4之前,我们需要这样:
$tmp = explode(‘ ‘, ‘Fang Bin Xin’);
echo $tmp[1]; // Bin
现在,我们可以这样玩了:
echo end(explode(‘ ‘, ‘Fang Bin Xin’)); // Xin
再来个高级点的例子:
1
2
3
4
5
|
function foobar()
{
return [ 'foo' => [ 'bar' => 'Hello' ]];
}
echo foobar()[ 'foo' ][ 'bar' ]; // Hello
|
*瓷锤注: Array dereferencing直译应为数组解除引用,效果不佳。其实更准确的翻译应为:“对函数返回结果的数组成员访问解析支持”,详见PHP官方解释。
匿名函数中的$this
现在,你可以在类实例中通过$this引用一个匿名函数(也叫闭包函数)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
class Foo
{
function hello() {
echo 'Hello Cichui!' ;
}
function anonymous()
{
return function () {
$this ->hello(); // 之前是不可能这么玩的
};
}
}
class Bar
{
function __construct(Foo $o ) // object of class Foo typehint
{
$x = $o ->anonymous(); // get Foo::hello()
$x (); // execute Foo::hello()
}
}
new Bar( new Foo); // Hello Cichui!
|
其实以前也能将就用,就是有点费劲:
1
2
3
4
5
6
7
|
function anonymous()
{
$that = $this ; // $that is now $this
return function () use ( $that ) {
$that ->hello();
};
}
|
<?= 永远有效
无论php.ini中如何配置,short_open_tag, 也就是<?=(php标记+echo)永远有效。现在,你可以安全地使用 <?=$title?> 替换以前的<?php echo $title;?>了。
支持二进制直接量
八进制(oct),前面加0;十六进制(hex),前面加0x;二进制(bin),现在在前面加0b就可以了
1
2
3
4
|
echo 0b11111; // PHP 5.4支持二进制了
echo 31; // 十进制
echo 0x1f; // 十六进制
echo 037; // 八进制
|
函数类型提示
自PHP 5.1起,类型提示支持对象和数组,PHP 5.4开始支持callable。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
function my_function(callable $x )
{
return $x ();
}
function my_callback_function(){ return 'Hello Cichui!' ;}
class Hello{ static function hi(){ return 'Hello Cichui!' ;}}
class Hi{ function hello(){ return 'Hello Cichui!' ;}}
echo my_function( function (){ return 'Hello Cichui!' ;}); // 闭包函数
echo my_function( 'my_callback_function' ); // 回调函数
echo my_function([ 'Hello' , 'hi' ]); // 类名,静态方法
echo my_function([( new Hi), 'hello' ]); // 类名,方法名
|
高精度计时器
此次引入了$_SERVER['REQUEST_TIME_FLOAT']数组变量,微秒级精度(百万分之一秒,float类型)。对于统计脚本运行时间会非常有用:
1
|
echo 'Executed in ' , round (microtime(true) - $_SERVER [ 'REQUEST_TIME_FLOAT' ], 2)
|
小结
总之,此次PHP 5.4升级进行大量的改动。 是时候升级了。
PHP 5.5又将给我们带来什么,你又有那些期待呢?
原文:http://net.tutsplus.com/tutorials/php/php-5-4-is-here-what-you-must-know/
转载于:https://www.cnblogs.com/czai/archive/2012/04/01/2427874.html
关于 PHP 5.4 你所需要知道的相关推荐
- 【趣题分享】关于蒋干盗书你所需要知道的
文章目录 序言 1 明牌条件下的最优盗书策略 1.1 最优策略的猜想 1.2 辅助分布列 1.3 最优策略的证明 2 一张过河拆桥的力量 3 先盗后拆 v.s. 先拆后盗 4 总结与推论 5 仿真代码 ...
- 关于在开源社区中的“工作倦怠”,你所需要知道的事
| 作者:Tara Gu | 编辑:王皓月 | 设计:朱亿钦 | 翻译:Paul Wang | 审稿:卫sir 今年早些时候,我出现了工作倦怠.凑巧的是,当时我正在研究"工作倦怠" ...
- 关于Android消息机制你所需要知道的
Android的消息机制几乎是面试必问的话题,当然也并不是因为面试,而去学习,更重要的是它在Android的开发中是必不可少的,占着举足轻重的地位,所以弄懂它是很有必要的.下面就来说说最基本的东西. ...
- 语义,艰难旅程上你所需要知道的
郑昀 20080712<?XML:NAMESPACE PREFIX = O /> 答某位网友的询问. 语义,是一条艰难的旅程. 语义,只能做到一些特定的事情而已,算法的正确率是有限的,到了 ...
- 关于字符编码,你所需要知道的(ASCII,Unicode,Utf-8,GB2312…)
字符编码的问题看似很小,经常被技术人员忽视,但是很容易导致一些莫名其妙的问题.这里总结了一下字符编码的一些普及性的知识,希望对大家有所帮助. 还是得从ASCII码说起 说到字符编码,不得不说ASCII ...
- 关于字符编码,你所需要知道的
起源 字符编码的问题看似很小,经常被技术人员忽视,但是很容易导致一些莫名其妙的问题.这里总结了一下字符编码的一些普及性的知识,希望对大家有所帮助. 还是得从ASCII码说起 说到字符编码,不得不说AS ...
- 【转】关于字符编码,你所需要知道的
字符编码的问题看似很小,经常被技术人员忽视,但是很容易导致一些莫名其妙的问题.这里总结了一下字符编码的一些普及性的知识,希望对大家有所帮助. 还是得从ASCII码说起 说到字符编码,不得不说ASCII ...
- 触屏计算机显示器CDU,科技:关于电脑显示器你所需要知道的
导语:显示器可以说是笔记本电脑最重要的硬件.毕竟,这是您实际使用设备的方式.显示器也难以解释和理解.它们可以被测量,但大多数人不熟悉这些测量的含义或它们与自己的观看体验有何关系.对比.屏幕分辨率.黑色 ...
- 转载:关于 PHP 5.4 你所需要知道的
HP 5.4来了,这是自5.3后的又一次主版本升级.此次升级改动较为显著,删除了一些过气儿的函数,带来了高达20%的速度提升和更少的内存使用. 新特性与改动 此次更新的关键新特性,包括:新增trait ...
最新文章
- CentOS 7 使用iptables 开放端口
- .Netcore使用Session
- Android中四种启动模式,最容易理解的小白教程
- textaligncenter仍然不居中_戊唑醇和己唑醇都是杀菌剂,有啥不同?真正懂的人不多...
- Java多线程 - 线程组
- Eclipse jar包打不进apk
- linux连接http报301解决,https下不加www的301强制跳转
- 零基础教你玩转ESP8266(一) 重识ESP8266
- TCP / IP攻击:ARP缓存中毒的基本原理、TCP序列号预测和TCP重置攻击
- python中button中command_tkinter模块的button控件不点击也运行command
- accept 返回0_Netty深入浅出系列:Netty源码分析之accept过程
- hadoop常用端口号
- ssd网络详解之detection output layer
- android 开发闪屏动画,Android闪屏效果实现方法
- Hbase Schema设计与数据模型操作
- (最详细教程)中国知网caj格式论文如何转化为word,pdf,txt
- CTFshow_命令执行
- 【java】除法,除数后缀
- eggjs 怎么使用 egg-jwt 实现 token 解析?
- 亮度不足 日本向12家LED销售企业下禁令