php 5.2.8升级5.3,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只需要这条命令即可:

$ php -S localhost:3300

也可以指定其它路径:

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

还可以指定路由:

$ php -S localhost:3300 router.php

2.1.2.Traits

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

魔术常量为__TRAIT__

官网的一个例子:

trait SayWorld {

public function sayHello() {

parent::sayHello();

echo “World!\n”;

echo ‘ID:’ . $this->id . “\n”;

}

}

class Base {

public function sayHello() {

echo ‘Hello ‘;

}

}

class MyHelloWorld extends Base {

private $id;

public function __construct() {

$this->id = 123456;

}

use SayWorld;

}

$o = new MyHelloWorld();

$o->sayHello();

/*will output:

Hello World!

ID:123456

*/

2.1.3. Short array syntax 数组简短语法

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

$array = [

"foo" => "bar",

"bar" => "foo"

];

2.1.4. Array dereferencing 数组值

function myfunc() {

return array(1,‘james’, ‘james@fwso.cn’);

}

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

$arr = myfunc();

echo $arr[1];

在PHP5.4中这样就行了:

$name = explode(“,”, “Laruence,male”)[0];

explode(“,”, “Laru

echo myfunc()[1];

其他:

$name = explode(“,”, “Laruence,male”)[0];

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以前需要:

$./configure –with-mysqli=mysqlnd

现在

$./configure –with-mysqli

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

2.1.8.实例化类

class test{

function show(){

return ‘test’;

}

}

echo (new test())->show();

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

foreach ([new Human("Gonzalo"), new Human("Peter")] as $human) {

echo $human->{‘hello’}();

}

2.1.10.Callable typehint

function foo(callable $callback) {

}

则:

foo(“false”); //错误,因为false不是callable类型

foo(“printf”); //正确

foo(function(){}); //正确

class A {

static function show() {

}

}

foo(array(“A”, “show”)); //正确

2.1.11.函数类型提示的增强

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

class bar {

function foo(bar $foo) {

}

//其中函数foo中的参数规定了传入的参数必须为bar类的实例,否则系统会判断出错。同样对于数组来说,也可以进行判断,比如:

function foo(array $foo) {

}

}

foo(array(1, 2, 3)); // 正确,因为传入的是数组

foo(123); // 不正确,传入的不是数组

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

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

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

2.1.13. 让Json更懂中文(JSON_UNESCAPED_UNICODE)

echo json_encode(“中文”, JSON_UNESCAPED_UNICODE);

//”中文”

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

$bin = 0b1101;

echo $bin;

//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# 不同,你不需要同时在声明和调用点指定按引用传递。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值