资讯专栏INFORMATION COLUMN

PHP 5.3向更高版本迁移之新特性

macg0406 / 651人阅读

摘要:新特性掌握的引入,可以扩展的内容,使在某种形式上实现了多重继承,更加灵活不能被实例化示例代码需要注意的是,的继承顺序来自当前类的成员覆盖了的方法,而则覆盖了被继承的方法当多个被同一个类使用的时候,会出现方法冲突的情况,使用关键词解决示

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}() 语法
示例代码:




新增二进制直接量,例如:0b001001101

PHP 5.5新特性
  

掌握

opcache集成在php发行包
opcache实际上是zend公司的Zend Optimizer Plus,功能类同apc
它的性能优于apc,对opcode进行了优化,关于opcache的更多信息
请移步鸟哥博客
一个关于Zend O+的小分享
因此在安装PHP的时候,编译参数一定要加上

--enabled-opcache     
推荐配置(php.ini)
zend_extension=opcache.so
opcache.enable_cli=1
opcache.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	";
  }
  $m = memory_get_usage(true);
  echo "
" . $m/1014/1024 . "M
";
}else if($cmd == 1){
  $r = xrange(1, 1000000);
  foreach($r as $v)
  {
      if($v > 20)
      {
          break;
      }
      echo "$v	";
  }
  $m = memory_get_usage(true);
  echo "
" . $m / 1014 /1024 . "M
";
}else{
  include "php-excel.class.php";
  $stime = microtime(true);
  if($cmd == 3)
  {
      $data = array();
      for($i = 0; $i < 10000;$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 < $n; $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 "
" . $m / 1014 /1024 . "M
";
  echo "cost time:" . $ctime . "s
";
}      

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/20605.html

相关文章

  • PHP-5.3更高版本迁移之变更

    摘要:变更本部分内容不再具体区分版本号及现在使用作为默认库强烈建议使用库和在编译安装的时候,加上如下参数扩展现在需要或更高版本不再支持使用低于版本的客户端库连接更多变更请访问下面的资源上面的变更主要是函数参数和配置指令在中 PHP5.4-5.5变更 ps:本部分内容不再具体区分版本号 mysqlnd mysql mysqli及PDO_mysql现在使用mysqlnd作为默认库 ...

    Simon 评论0 收藏0
  • PHP-5.3更高版本迁移之不兼容

    PHP 5.4不兼容内容 熟悉 安全模式的移除(safe_mode),涉及到php.ini配置指令 安全模式开启,限制PHP中的一些内置函数的使用 代码中如果有依赖于安全模式保障安全的内容,需要调整 移除魔术引号(magic_quote),涉及到php.ini配置指令 魔术引号自动对用户提交数据转义(包括不必要转义的数据),性能低下 魔术引号的效果和使用 addslashes() ...

    bitkylin 评论0 收藏0
  • PHP-5.3更高版本迁移系列博客使用的php-excel文件类

    摘要: $this->getWorksheetTitle($title), data => $data ); } /** * Write workbook to file * * Writes the workbook in...

    Harriet666 评论0 收藏0
  • Laravel 5.3 预热:10 个你需要知道的变更

    摘要:本文经授权转自社区说明发布临近,大体构建已经完成,文档整理完成后即可发布。附带了一个响应式邮件模板,通知类中唯一需要做的就是像下面这样发送消息错误处理是一个可选的扩展包,提供了完整可用的服务。 本文经授权转自 PHPHub 社区 说明 Laravel 5.3 发布临近,大体构建已经完成,文档整理完成后即可发布。 下面是对 Laravel 5.3 新特性的整理,不完整列表。 1、全文搜...

    沈建明 评论0 收藏0
  • Java 8 新特性之新的时间日期 API

    摘要:概述简介引入了一套全新的时间日期,操作起来更简便。可以使用的锁解决的线程安全问题测试方法使用进行格式化,是线程安全的时区设置带时区的时间本文首发于凌风博客新特性之新的时间日期作者凌风 1. 概述 1.1 简介 Java 8 引入了一套全新的时间日期API,操作起来更简便。简单介绍下,LocalDate和LocalTime和LocalDateTime的使用; java.util.Dat...

    JaysonWang 评论0 收藏0

发表评论

0条评论

macg0406

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<