PHP 5.3 5.4 5.5新特性(二)

2.PHP 5.4中的新特性
2.1.PHP 5.4中的新特性
2.1.1. Buid-in web server内置了一个简单的Web服务器

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

 
 
  1. $ php -S localhost:3300

也可以指定其它路径:

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

还可以指定路由:

 
 
  1. $ php -S localhost:3300 router.php

2.1.2.Traits

Traits提供了一种灵活的代码重用机制,即不像interface一样只能定义方法但不能实现,又不能像class一样只能单继承。至于在实践中怎样使用,还需要深入思考。魔术常量为__TRAIT__

 
 
  1. 官网的一个例子:
  2. trait SayWorld {
  3. public function sayHello() {
  4. parent::sayHello();
  5. echo World!\n”;
  6. echo ID:’ . $this->id . \n”;
  7. }
  8. }
  9. class Base {
  10. public function sayHello() {
  11. echo Hello ‘;
  12. }
  13. }
  14. class MyHelloWorld extends Base {
  15. private $id;
  16. public function __construct() {
  17. $this->id = 123456;
  18. }
  19. use SayWorld;
  20. }
  21. $o = new MyHelloWorld();
  22. $o->sayHello();
  23. /*will output:
  24. Hello World!
  25. ID:123456
  26. */

2.1.3. Short array syntax 数组简短语法

 
 
  1. $arr = [1,'james', 'james@fwso.cn'];
  2. $array = [
  3.   "foo" => "bar",
  4.   "bar" => "foo"
  5.   ];

2.1.4. Array dereferencing 数组值

 
 
  1. function myfunc() {
  2. return array(1,‘james’, james@fwso.cn’);
  3. }

我认为比数组简短语法更方便的是dereferencing,以前我们需要这样:

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

在PHP5.4中这样就行了:

 
 
  1. $name = explode(“,”, Laruence,male”)[0];
  2. explode(“,”, Laru
  3. echo myfunc()[1];

其他:

 
 
  1. $name = explode(“,”, Laruence,male”)[0];
  2. explode(“,”, Laruence,male”)[3] = phper”;

本例要注意一个要点 http://www.laruence.com/2011/12/19/2409.html
2.1.5. Upload progress 文件上传

Session提供了上传进度支持,通过$_SESSION["upload_progress_name"]就可以获得当前文件上传的进度信息,结合Ajax就能很容易实现上传进度条了。
详细的看http://www.laruence.com/2011/10/10/2217.html

2.1.6. JsonSerializable Interface [JSON 序列化对象]

实现了JsonSerializable接口的类的实例在json_encode序列化的之前会调用jsonSerialize方法,而不是直接序列化对象的属性。
参考http://www.laruence.com/2011/10/10/2204.html

2.1.7. Use mysqlnd by default

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

 
 
  1. $./configure with-mysqli=mysqlnd

现在

 
 
  1. $./configure with-mysqli

以上来自:http://www.hdj.me/php54

2.1.8.实例化类

 
 
  1. class test{
  2. function show(){
  3. return test’;
  4. }
  5. }
  6. echo (new test())->show();

2.1.9.支持 Class::{expr}() 语法

 
 
  1. foreach ([new Human("Gonzalo"), new Human("Peter")] as $human) {
  2. echo $human->{‘hello’}();
  3. }

2.1.10.Callable typehint

 
 
  1. function foo(callable $callback) {
  2. }
则:
 
 
  1.   foo(“false”); //错误,因为false不是callable类型
  2.   foo(“printf”); //正确
  3.   foo(function(){}); //正确
  4. class A {
  5.   static function show() {
  6. }
  7. }
  8.   foo(array(“A”, show”)); //正确

2.1.11.函数类型提示的增强

由于php是弱类型的语言,因此在php 5.0后,引入了函数类型提示的功能,其含义为对于传入函数中的参数都进行类型检查,举个例子,有如下的类:

 
 
  1. class bar {
  2. function foo(bar $foo) {
  3. }
  4. //其中函数foo中的参数规定了传入的参数必须为bar类的实例,否则系统会判断出错。同样对于数组来说,也可以进行判断,比如:
  5. function foo(array $foo) {
  6. }
  7. }
  8. foo(array(1, 2, 3)); // 正确,因为传入的是数组
  9. foo(123); // 不正确,传入的不是数组

2.1.12.新增加了$_SERVER["REQUEST_TIME_FLOAT"]

这个是用来统计服务请求时间的,并用ms来表示

 
 
  1. echo “脚本执行时间 “, round(microtime(true) - $_SERVER["REQUEST_TIME_FLOAT"], 2), s”;

2.1.13. 让Json更懂中文(JSON_UNESCAPED_UNICODE)

 
 
  1. echo json_encode(“中文”, JSON_UNESCAPED_UNICODE);
  2. //”中文”

2.1.14. 二进制直接量(binary number format)

 
 
  1. $bin = 0b1101;
  2. echo $bin;
  3. //13

2.2 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了。

删除的特性
最后,我们集中整理了几年来标记为已弃用的多个特性。这些特性包括 allow_call_time_pass_reference、define_syslog_variables、highlight.bg、register_globals、register_long_arrays、magic_quotes、safe_mode、zend.ze1_compatibility_mode、session.bug_compat42、session.bug_compat_warn 以及 y2k_compliance。
除了这些特性之外,magic_quotes 可能是最大的危险。在早期版本中,未考虑因 magic_quotes 出错导致的后果,简单编写且未采取任何举措使自身免受 SQL 注入攻击的应用程序都通过 magic_quotes 来保护。如果在升级到 PHP 5.4 时未验证已采取正确的 SQLi 保护措施,则可能导致安全漏洞。

其他改动和特性
有一种新的“可调用的”类型提示,用于某方法采用回调作为参数的情况。
htmlspecialchars() 和 htmlentities() 现在可更好地支持亚洲字符,如果未在 php.ini 文件中显式设置 PHP default_charset,这两个函数默认使用 UTF-8 而不是 ISO-8859-1。
会话 ID 现在默认通过 /dev/urandom(或等效文件)中的熵生成,而不是与早期版本一样成为必须显式启用的一个选项。
mysqlnd 这一捆绑的 MySQL 原生驱动程序库现在默认用于与 MySQL 通信的各种扩展,除非在编译时通过 ./configure 被显式覆盖。
可能还有 100 个小的改动和特性。从 PHP 5.3 升级到 5.4 应该极为顺畅,但请阅读迁移指南加以确保。如果您从早期版本升级,执行的操作可能稍多一些。请查看以前的迁移指南再开始升级。

2.3.PHP5.4弃用功能

备受指责的 Register Globals 已从 PHP 中完全删除。十年来,该特性一直以其频繁发生的安全漏洞而著称。2002年该特性被设置为默认关闭。2009年发布的 PHP5.3 将该特性标记为“弃用”,想必从那时起,大部分开发人员已经不再使用它。
从 PHP 中移除的另一个不讨喜的特性是 Magic Quotes。Magic Quotes 本意是对字符串进行自动转义(escape)以试图避免 SQL 注入攻击。但是由于字符串的转义使用方法常与特定背景相关,因此,比起试图解决的问题,它反而造成了更多的问题。该特性同 Register Globals 一样,也在 2009 年被标记为“弃用”。
PHP 中的 break 和 continue 语句之后可以跟上一个参数用来指明跳出的循环层数。如果不指定参数,它会像 VB、C#或 Java 一样跳出最内层的循环。在 PHP 5.4 之前,开发人员可以向 break 语句传递一个变量,而现在只能传递常量。
PHP 允许参数按引用传递。在早期版本中,你可以通过为调用点添加修饰来指明变量按引用传递。在 PHP 5.4 中,该选项已被移除。相反,现代 PHP 编程只需要在函数声明时指定按引用传递即可。与 C# 不同,你不需要同时在声明和调用点指定按引用传递。


来源:http://www.webyang.net/Html/web/article_120.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值