PHP5.5新特性

1 生成器 yield关键字

yield的中文文档在这里:http://php.net/manual/zh/language.generators.overview.php

查看文档,能知道yield的一个功能就是能有效的降低迭代的内存开销。比如官网的这个xrange例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
function xrange($start, $limit, $step = 1) {
    for ($i = $start; $i <= $limit; $i += $step) {
        yield $i;
    }
}
echo 'Single digit odd numbers: ';
/*
 * Note that an array is never created or returned,
 * which saves memory.
 */
foreach (xrange(1, 9, 2) as $number) {
    echo "$number ";
}
echo "\n";
?>

这里的xrange是一个迭代,功能和range是一样的,如果使用range函数的话,那么函数内部实现会储存每个迭代的中间过程,即每个中间变量都有个内存空间,那么首先程序使用的内存空间就大了,而且分配内存,回收内存都会导致程序的运行时间加长。但是如果使用上yield实现的xrange函数的话,里面所有的中间变量都只使用一个内存$i,这样节省的时间和空间都会变小。

 

那么为什么yield会有这样的效果呢?联想到lua中的yield,这里就算是协程的概念了。在lua语言中,当程序运行到yield的时候,使用协程将上下文环境记录住,然后将程序操作权归还到主函数,当主函数调用resume的时候,会重新唤起协程,读取yield记录的上下文。这样形成了程序语言级别的多协程操作。php 5.5这里的yield也是同样的道理,当程序运行到yield的时候,当前程序就唤起协程记录上下文,然后主函数继续操作,只是php中没有使用如resume一样的关键字,而是“在使用的时候唤起”协程。比如上例中的foreach迭代器就能唤起yield。所以上面的这个例子就能理解了。

 

其实照着引用yield来说,好多内部函数,特别是迭代有关的函数应该都有可能进行优化。或许后续会有yield版本和非yield版本的实现同一功能的函数把。

2 finally关键字

这个和java中的finally一样,经典的try ... catch ... finally 三段式异常处理。

3 foreach 支持list()

对于“数组的数组”进行迭代,之前需要使用两个foreach,现在只需要使用foreach + list了,但是这个数组的数组中的每个数组的个数需要一样。看文档的例子一看就明白了。

1
2
3
4
5
6
7
8
9
10
<?php
$array = [
    [1, 2],
    [3, 4],
];
foreach ($array as list($a, $b)) {
    echo "A: $a; B: $b\n";
}
?>

4 empty() 支持自定义函数了

之前empty()中的参数是不能为函数的。现在可以了

1
2
3
4
5
6
7
8
9
10
<?php
function foo(){
    return false;
}
if(empty(foo())){
    echo 11;
} else {
    echo 12;
}

5 非变量array和string也能支持下标获取了

1
2
3
4
5
6
7
8
<?php
  
echo array(1, 2, 3)[0];
echo [1, 2, 3][0];
  
echo "foobar"[2];
  
?>

6 类名通过::class可以获取

1
2
3
4
5
6
7
8
<?php
namespace Name\Space;
class ClassName {}
echo ClassName::class;
echo "\n";
?>

7 增加了opcache扩展

使用opcache会提高php的性能,你可以和其他扩展一样静态编译(--enable-opcache)或者动态扩展(zend_extension)加入这个优化项。

8  新的密码哈希 API

A 新的密码哈希 API that makes it easier to securely hash and manage passwords using the same underlying library ascrypt() in PHP has been added. See the documentation for password_hash() for more detail.

Apache 2.4 handler supported on Windows

The Apache 2.4 handler SAPI is now supported on Windows.

改进 GD

对 GD 扩展做了多方面的改进,包括:

  • 翻转支持使用新的 imageflip() 函数。
  • 高级裁剪支持使用 imagecrop() & imagecropauto() 函数。
  • WebP 的读写分别支持使用 imagecreatefromwebp() & imagewebp() 。

转载于:https://www.cnblogs.com/whoamme/p/3539323.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/399735.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu16.04中php如何切换版本

其实就是一条Linux命令,如下: sudo update-alternatives --config php 会出现下面选项: There are 2 choices for the alternative php (providing /usr/bin/php).Selection Path Priority Status -------------------------------------------------------…

Java之杨辉三角的实现

今天突然想温习一下Java的基础&#xff0c;想了想就写写杨辉三角吧 1、直接法&#xff0c;利用二维数组 1 import java.util.Scanner;2 public class Second3 {4 public static void main(String[] args) {5 // TODO Auto-generated method stub6 Scanner …

MAC下面maven如何设置让其实下载源码

2019独角兽企业重金招聘Python工程师标准>>> Eclipse--->偏好设置&#xff0d;&#xff0d;&#xff0d;&#xff0d; >Maven--->download artifact source 转载于:https://my.oschina.net/u/2422498/blog/500292

chmod 777修改权限指令介绍

chmod 777修改权限指令介绍

EventBus使用详解(一)——初步使用EventBus

前言&#xff1a;EventBus是上周项目中用到的&#xff0c;网上的文章大都一样&#xff0c;或者过时&#xff0c;有用的没几篇&#xff0c;经过琢磨&#xff0c;请教他人&#xff0c;也终于弄清楚点眉目&#xff0c;记录下来分享给大家。 相关文章&#xff1a; 1、《EventBus使用…

Android应用程序打包时,出现错误:XXX is not translated in af (Afrikaans), am (Amharic), ar (Arabic).....(...

转自&#xff1a;http://blog.163.com/shexinyang126/blog/static/136739312201492144928812/ 问题&#xff1a;当我们开发完成一个Android应用程序后&#xff0c;在发布该应用程序之前必须要经过的一步时打包应用程序。 至于从打包程序到发布的完整过程可以参考&#xff1a; A…

ubuntu 16.04 + apache2 将php7.1 切换到 php7.3

背景&#xff1a; ubuntu 更新时&#xff0c;选择&#xff0c;保留当前 php 版本&#xff0c;导致出现了 多个php 版本 &#xff0c;phpinfo 显示的是 php7.1。在用 php -i 查看&#xff0c;发现&#xff0c;很多扩展打不开。 1. Ubuntu16.04中php如何切换版本 sudo update-al…

Delphi XE5教程4:程序和单元概述

内容源自Delphi XE5 UPDATE 2官方帮助《Delphi Reference》&#xff0c;本人水平有限&#xff0c;欢迎各位高人修正相关错误&#xff01;也欢迎各位加入到Delphi学习资料汉化中来&#xff0c;有兴趣者可QQ&#xff1a;34484690qq.com Programs and Units 第二章 程序和单元 Thi…

如何拿到阿里算法校招offer

好多同学有问过怎么能拿到阿里算法类校招的offer&#xff0c;刚好看到这篇文章分享给大家&#xff0c;详情可以看原文链接&#xff0c;原文链接中有视频讲解。 师兄师姐的建议&#xff1a; 之前初学算法的时候上过的公开课和看过的书 1. Coursera&#xff1a;《Machine Learnin…

通用软件/工具手册

为什么80%的码农都做不了架构师&#xff1f;>>> #sublime text ##Settings - User {"font_size": 14.0,"tab_size": 2,"scroll_past_end": true,"translate_tabs_to_spaces": true,"trim_trailing_white_space_on_sa…

php 发送邮件 - 资料收集

PHPMailer - PHP的全功能电子邮件创建和传输类

优秀的SharePoint 2013开发工具有哪些(二)

SharePoint 2013 Search Tool 搜索功能是SharePoint2013的一大亮点。SharePoint 2013 Search Tool可以让我们学习和了解查询如何被格式化&#xff0c;并让我们轻松地配置一个Search REST Query。使用SharePoint 2013 Search Tool来创建你的查询&#xff0c;就可以对它们进行分…

mixin使用场景

mixins 将两个的对象的混合为一个数组&#xff0c;彼此都可以被调用,下面为演示代码及其结果 ps:当对象键值对 键名冲突时&#xff0c;保留非mixin对象的键值对 <div id"app"></div> <script> var myMixin{ template:<h1>holle mixin<…

MS SQL 2000 分配权限

/** 分配权限 **/ use [master]create login [ln-tf\liaobin] from windows;gogrant control server to [ln-tf\liaobin]; --授予管理员完全控制权限go create login [ln-tf\shipping staff] from windows with default_database[db_packs];go use [db_packs];gocreate user ln…

PHP使用SMTP邮件服务器

https://blog.csdn.net/qq_20343517/article/details/77453666 用之前记得先去163注册一个邮箱&#xff0c;然后打开SMTP服务&#xff0c;当然也可以使用QQ邮箱等&#xff0c;但配置信息得改。 话不多说&#xff0c;直接上代码 email.class.php 定义发送邮件的库 <?php …

使用jquery解析xml

使用Jquery解析XML&#xff1a;$.ajax({ url: ajax/test.xml, dataType : xml, cache: false, success: function(xml) { $("AUTHOR", xml).each(function(id) { AUTHOR $("AUTHOR", xml).get(id); …

cv1159 最大全0子矩阵(极大子矩阵)

题目描述 Description 在一个01方阵中找出其中最大的全0子矩阵&#xff0c;所谓最大是指0的个数最多。 输入描述 Input Description 输入文件第一行为整数N&#xff0c;其中1<N<2000&#xff0c;为方阵的大小&#xff0c;紧接着N行每行均有N个0或1&#xff0c;相邻两数…

Docker认识基础

版权声明&#xff1a;本文为博主chszs的原创文章&#xff0c;未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/48212081 Docker认识基础 作者&#xff1a;chszs&#xff0c;版权所有&#xff0c;未经同意&#xff0c;不得转载。博主主页&#xff1a;http:…

信管 - 挣值 - 资料收集

信息系统项目管理师计算题之挣值分析、完工预测知识与习题 挣值分析&#xff1a;早期只需要记住三个参数&#xff0c;4个指标以及公式即可。PV、EV、AC、CV、SV、CPI、SPI。但现在没这么简单了&#xff0c;深入考核PV、EV、AC的理解&#xff0c;从一段文字描述中计算出PV、EV、…

獲取mysql字段的注释或描述

show full fields from table 获取mysql的表注释和字段注释 - 杨宇的技术博客 - 博客频道 - CSDN.NET http://blog.csdn.net/yangyu112654374/article/details/5419807转载于:https://www.cnblogs.com/abinlove/p/3559011.html