php 5.4新特性 掌握
traits
trait的引入,可以扩展class的内容,使class在某种形式上实现了多重继承,更加灵活
trait不能被实例化
示例代码: sayhello(); $o->sayworld(); $o->sayexclamationmark();
复制代码
需要注意的是,trait的继承顺序:
来自当前类的成员覆盖了 trait 的方法,而 trait 则覆盖了被继承的方法
当多个trait被同一个类使用的时候,会出现方法冲突的情况,使用关键词insteadof解决
示例代码:
复制代码
新增短数组语法 1, 'two' => 2, 'three' => 3, 'four' => 4];
复制代码
新增支持对函数返回数组的成员访问解析 复制代码
现在不管是否设置 short_open_tag php.ini 选项,= 将总是可用
新增在实例化时访问类成员
foo();
复制代码
ps:注意括号
session 扩展现在能追踪文件的 上传进度
在php.ini中配置session.upload_progress.enabled = on,
就会开启文件上传进度跟踪功能
max_input_vars 指令
在php.ini文件中,设定max_input_vars的值,
控制$_get、$_post 和 $_cookie的最大长度
降低构造哈希碰撞进行拒绝服务攻击的可能性
了解
现在闭包支持 $this 现在支持 class::{expr}() 语法
示例代码: 复制代码
新增二进制直接量,例如:0b001001101php 5.5新特性 掌握
opcache集成在php发行包
opcache实际上是zend公司的zend optimizer plus,功能类同apc
它的性能优于apc,对opcode进行了优化,关于opcache的更多信息
请移步鸟哥博客
一个关于zend o+的小分享
因此在安装php的时候,编译参数一定要加上--enabled-opcache 推荐配置(php.ini)zend_extension=opcache.soopcache.enable_cli=1opcache.memory_consumption=128 //共享内存大小, 这个根据你们的需求可调opcache.interned_strings_buffer=8 //interned string的内存大小, 也可调opcache.max_accelerated_files=4000 //最大缓存的文件数目opcache.revalidate_freq=60 //60s检查一次文件更新opcache.fast_shutdown=1 //打开快速关闭, 打开这个在php request shutdown的时候,回收内存的速度会提高opcache.save_comments=0 //不保存文件/函数的注释
复制代码
生成器(generators)
熟悉python的同学对生成器肯定不会陌生的
其功能是在函数中使用关键词yield,中断函数执行并返回一个能在foreach中使用的迭代器
这个语法应该是php5.5中最令人激动的特性了
下面的代码演示了生成器用法,并且做了对比,用来突出生成器的优势 = 0) { throw new logicexception('step must be -ve'); } for($i = $start; $i >= $end; $i = $i + $step) { yield $i; } }}if($cmd == 0){ $r = range(1, 1000000); foreach($r as $v) { if($v > 20) { break; } echo $v\t; } $m = memory_get_usage(true); echo \n . $m/1014/1024 . m\n;}else if($cmd == 1){ $r = xrange(1, 1000000); foreach($r as $v) { if($v > 20) { break; } echo $v\t; } $m = memory_get_usage(true); echo \n . $m / 1014 /1024 . m\n;}else{ include 'php-excel.class.php'; $stime = microtime(true); if($cmd == 3) { $data = array(); for($i = 0; $i { $data[] = range(1,100); } $xls = new excel_xml(); $xls->addworksheet('test', $data); $xls->writeworkbook('test.xls', './'); }else{ $data = function($n = 10000){ for($i = 0; $i { yield xrange(1,100); } }; $xls = new excel_xml(); $xls->addworksheet('test', $data()); $xls->writeworkbook('test.xls', './'); } $ctime = microtime(true) - $stime; $m = memory_get_usage(true); echo \n . $m / 1014 /1024 . m\n; echo cost time: . $ctime . s\n;}
复制代码
ps:php-excel.class.php文件内容请参考本gist
php-excel.php
新增 finally 关键字
示例代码:复制代码
编写代码的时候,一定要养成良好的习惯,及时的释放打开的资源
password api
password系列函数,为我们存储密码,实现了更简便安全的方式
密码的存储从明文到md5到md5+salt,到mcrpty+salt
password_hash默认使用bcrypt加密算法,自动生成salt,加密密码
示例代码 复制代码
强烈建议新应用开发密码存储使用内置password系列函数
array_column
这个函数早就应该有了
我们从数据库中取出10条记录,想要拿到这十条记录中的指定某一列,之前只能foreach了
现在只需要一个array_coulum函数搞定,这个函数实际意义很大,单独提出来讲了
示例代码: 2135, 'first_name' => 'john', 'last_name' => 'doe', ), array( 'id' => 3245, 'first_name' => 'sally', 'last_name' => 'smith', ), array( 'id' => 5342, 'first_name' => 'jane', 'last_name' => 'jones', ), array( 'id' => 5623, 'first_name' => 'peter', 'last_name' => 'doe', ));$first_names = array_column($records, 'first_name');print_r($first_names);
复制代码
熟悉
foreach 现在支持 list()复制代码
需要注意的是,遍历数组的子数组个数要一样
empty() 支持任意表达式,函数调用也可以使用empty了 了解
改进 gd
翻转支持使用新的 imageflip() 函数
高级裁剪支持使用 imagecrop() & imagecropauto() 函数
webp 的读写分别支持使用 imagecreatefromwebp() & imagewebp() 另外php5.4和php5.5新增的function,新增的class,新增的interface,新增的全局常量还是挺多的
想了解的,可以查看下面链接
http://www.php.net/manual/zh/migration55.new-functions.php
http://www.php.net/manual/zh/migration55.classes.php
http://www.php.net/manual/zh/migration55.new-methods.php
http://www.php.net/manual/zh/migration55.global-constants.php
http://www.php.net/manual/zh/migration54.functions.php
http://www.php.net/manual/zh/migration54.classes.php
http://www.php.net/manual/zh/migration54.methods.php
http://www.php.net/manual/zh/migration54.global-constants.php
更高, 新特性, php