您现在的位置是:首页 > 学无止境
PHP5.4的新特性
PHP5.3刚出来不久, PHP6孕育中的同时, PHP5.4又放出了第一个alpha版本.
5.4主要包括以下特性:
Added...
- 作者: Laruence
- 本文地址: http://www.laruence.com/2011/07/02/2097.html
- 转载请注明出处
PHP5.3刚出来不久, PHP6孕育中的同时, PHP5.4又放出了第一个alpha版本.
5.4主要包括以下特性:
Added: Traits language construct Added: Array dereferencing support Added: DTrace support Improved: Improved Zend Engine memory usage and performance Moved: ext/sqlite moved to pecl (sqlite3 support is still built-in) Removed: break/continue $var syntax Removed: register_globals, allow_call_time_pass_reference, and register_long_arrays ini options Removed: session_is_regisitered(), session_registered(), and session_unregister()
我们重点关注下新增的这三点:
Traits language construct
Traits不是什么新概念了, c++, java都有类似的东西, 只不过这次PHP也引入了进来.
Traits是一种轻量级的方法复用(相对继承来说).为什么这么说呢? 这就好比, 如果你提供一个基类供用户去继承使用, 那么不可避免的你就需要考虑如何能让用户继承后可用, 如何避免用户改写了某些关键属性, 覆盖了某些关键方法而造成出错. 这个时候你就要考虑改用public还是private, 或者protected, 你还要考虑, 那个方法应该申明为FINAL..
而如果使用Traits, 那么你就不需要担心这些问题, 它是一种组合方式, 你提供的素材, 无论在任何地方都是自我一个整体.
<?php trait SayWorld { public function sayHello() { echo 'Hello World!'; } } class MyHelloWorld extends Base { use SayWorld; } $o = new MyHelloWorld(); $o->sayHello(); // Hello World
Trait和继承以及当前类的同名函数之间的冲突, 有一套固定的解决方案, 也就是当前类的方法覆盖Trait的同名方法, 而Trait中的方法, 覆盖基类的同名方法. 比如:
<?php class Base { public function sayHello() { echo 'Hello '; } } trait SayWorld { public function sayHello() { parent::sayHello(); echo 'World!'; } } class MyHelloWorld extends Base { use SayWorld; } $o = new MyHelloWorld(); $o->sayHello(); // echos Hello World
更多关于Traits的信息, 请参考: Traits for PHP RFC
Array dereferencing support
这个可是个好东西, 有了Array dereferencing, 以前的这种写法就再也不必要了:
<?php list($name,) = explode(",", "Laruence, male"); ?>
取而代之的是:
$name = explode(",", "Laruence,male")[0];
另外, 据Cataphrac介绍, Array derefencing也可以出现再赋值语句的左值中, 也就是理论上你可以这么写:
explode(",", "Laruence,male")[3] = "phper";但也许有朋友会问这个有什么意义么? 呵呵, 当时我也对Cataphrac提出了这样的疑问, 不过后来了解到, 还是有一些场景可以用到的, 比如你先需要调用一个函数做初步处理,然后对处理结果进行调整:
<?php function &ref(&$arr) { return $arr; } $arr = array(1,2,3); ref($arr)[4] = 4; var_dump($arr); ?>
DTrace support
DTrace是一个性能分析工具, 可以跟踪出函数调用点,返回点等数据, 对于这个我也不是很了解, 感兴趣的同学可以参看PHP 5.3.99-DEV AND DTRACE PART I
Webserver SAPI
最后, PHP5.4还新增了一个SAPI, 这个SAPI将支持直接把PHP当做Websever使用:
$ php -S localhost:8000 test.php //output: PHP Development Server is listening on localhost:8000 in foo/ ... Press Ctrl-C to quit.这个新的SAPI, 错过了alpha1版本, 应该会在下个测试版, 和最终版中放出来, 也不支持直接patch到php5.4以前的版本(这个比较悲剧, 如果要用, 看来只能自己折腾了). 有关PHP Webserver SAPI的更多信息, 可以参看:webserver sapi
下一篇:MySQL数据库优化实践
文章评论
- 登录后评论
点击排行
-
php-fpm安装、配置与优化
转载自:https://www.zybuluo.com/phper/note/89081 1、php中...
-
centos下postgresql的安装与配置
一、安装(以root身份进行)1、检出最新的postgresql的yum配置从ht...
-
Mysql的大小写敏感性
MYSQL在默认的情况下查询是不区分大小写的,例如:CREATE TABLE...
-
关于URL编码
转载自:http://www.ruanyifeng.com/blog/2010/02/url_encoding....
-
header中的Cache-control
网页的缓存是由HTTP消息头中的“Cache-control”来控制的,常见的...