`
liuxin-smallmouse
  • 浏览: 19278 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

PHP5.5 将会带来哪些新特征

    博客分类:
  • PHP
阅读更多

PHP5.4 在四个月前发布了,现在来看PHP下一个版本似乎早了点,但我还是想给大家透露一些PHP5.5 将会带哪些新特征。

注意一点 PHP5.5 还在早期的开发阶段,所以没有人知道最终的结果是什么样的。所有我在这里谈论的都只是提案。也就是说,不是所有下面列出的新特征都会加入PHP5.5。

所以,不要太兴奋 :)

新特性及提案列表 都相当大,而且不是按重要性排序。所以,如果你不想通读一遍的话,这里有四个特点我个人是最兴奋的:

  • 一个简单的密码散列API
  • 标量类型提示
  • Getter和Setter   
  • 生成器


现在,让我们来看看PHP5.5 可能会新增的功能:

不再向后兼容

首先,我们将有两个变化:

1、放弃对Windows XP和2003 的支持

PHP5.5 将不再支持Windows XP和2003,这些系统已经有十年的历史,所以PHP将不再提供支持。

2、弃用e修饰符

e修饰符是指示 preg_replace 函数用来评估替换字符串作为PHP代码,而不只是仅仅做一个简单的字符串替换。不出所料,这种行为会源源不断的出现安全问题。这就是为什么在PHP5.5 中使用这个修饰符将抛出一个弃用警告。作为替代,你应该使用 preg_replace_callback 函数。你可以从 RFC 找到更多关于这个变化相应的信息。

新增函数和类

接下来,我们将看到在计划之中的新增函数和类:

boolval()

PHP已经实现了strval、intval和floatval的函数。为了达到一致性将添加boolval函数。它完全可以作为一个布尔值计算,也可以作为一个回调函数。

hash_pbkdf2()

PBKDF2 全称“Password-Based Key Derivation Function 2”,正如它的名字一样,是一种从密码派生出加密密钥的算法。这就需要加密算法,也可以用于对密码哈希。更广泛的说明和用法示例,请参阅 RFC

intl 扩展

将有许多改进 intl的扩展 。 例如,将会有新的 IntlCalendar,IntlGregorianCalendar,IntlTimeZone,IntlBreakIterator,IntlRuleBasedBreakIterator,IntlCodePointBreakIterator 类。之前,我竟然不知道有这么多关于intl扩展,如果你想知道更多,我建议你去最新公告里找 CalendarBreakIterator

array_column()

有一个 提议 ,新增array_column(或array_pluck)函数,它的表现如下:

<?php

$userNames = array_column($users, 'name');
// is the same as
$userNames = [];
foreach ($users as $user) {
    $userNames[] = $user['name'];
}


像这样从数据库获取一列,但返回是数组。

一个简单的密码散列API

最近的密码泄漏(从LinkedIn等)显示,即使是大型网站也不知道如何正确地散列密码。几年前人们一直提倡使用bcrypt,但大多数人似乎仍然是使用完全不安全的sha1哈希值。

我们认为这样做的原因可能是真的很难使用crypt函数的API。因此我们会采用一个新的、简单的API,用于安全的密码散列:

<?php

$password = "foo";

// creating the hash
$hash = password_hash($password, PASSWORD_BCRYPT);

// verifying a password
if (password_verify($password, $hash)) {
    // password correct!
} else {
    // password wrong!
}


新的散列API提供了一些更多的特性,请参阅 RFC

语言改变

现在真正有趣的东西:新的语言特性和增强功能。

常量引用

“常量引用”意味着数组可以直接操作字符串和数组字面值。举两个例子:

<?php

function randomHexString($length) {
    $str = '';
    for ($i = 0; $i < $length; ++$i) {
        $str .= "0123456789abcdef"[mt_rand(0, 15)]; // direct dereference of string
    }
}

function randomBool() {
    return [false, true][mt_rand(0, 1)]; // direct dereference of array
}


我不认为在实践中会使用此功能,但它使语言更加一致。请参阅 RFC

调用empty()函数(和其他表达式)一起工作

目前,empty()语言构造只能用在变量,而不能在其他表达式。在特定的代码像empty($this->getFriends())将会抛出一个错误。作为PHP5.5 这将成为有效的代码。更多信息请参阅 RFC

获取完整类别名称

PHP5.3 中引入命名空间的别名类和命名空间短版本的功能。虽然这并不适用于字符串类名称:

<?php

use Some\Deeply\Nested\Namespace\FooBar;

// does not work, because this will try to use the global `FooBar` class
$reflection = new ReflectionClass('FooBar');


更多示例请参阅 RFC

参数跳跃

如果你有一个函数接受多个可选的参数,目前没有办法只改变最后一个参数,而让其他所有参数为默认值。

RFC 上的例子,如果你有一个函数如下:

function create_query($where, $order_by, $join_type='', $execute = false, $report_errors = true) { ... }


那么有没有办法设置$report_errors=false,而其他两个为默认值。为了解决这个跳跃参数的问题而提出:

create_query("deleted=0", "name", default, default, false);


我个人不是特别喜欢这个提议。在我的眼睛里,代码需要这个功能,只是设计不当。函数不应该有12个可选参数。

标量类型提示

标量类型提示原本计划进入5.4,但由于缺乏共识而没有做。获取更多关于为什么标量类型提示没有做进PHP的信息,请参阅: 标量类型提示比你认为的更难

对于PHP5.5 而言,针对标量类型提示讨论又一次出现,我认为这是一个相当不错的 提议

它需要通过输入值来指定类型。例如:123,123.0,“123”都是一个有效的int参数输入,但“hello world”就不是。这与内部函数的行为一致。

function foo(int $i) { ... }

foo(1);      // $i = 1
foo(1.0);    // $i = 1
foo("1");    // $i = 1
foo("1abc"); // not yet clear, maybe $i = 1 with notice
foo(1.5);    // not yet clear, maybe $i = 1 with notice
foo([]);     // error
foo("abc");  // error


Getter 和 Setter

如果你从不喜欢写这些getXYZ()和setXYZ($value)方法,那么这应该是你最受欢迎的改变。提议添加一个新的语法来定义一个属性的设置/读取:

<?php

class TimePeriod {
    public $seconds;

    public $hours {
        get { return $this->seconds / 3600; }
        set { $this->seconds = $value * 3600; }
    }
}

$timePeriod = new TimePeriod;
$timePeriod->hours = 10;

var_dump($timePeriod->seconds); // int(36000)
var_dump($timePeriod->hours);   // int(10)


当然还有更多的功能,比如只读属性。如果你想要知道更多,请参阅 RFC

生成器

目前,自定义迭代器很少使用,因为它们的实现,需要大量的样板代码。生成器解决这个问题,并提供了一种简单的样板代码来创建迭代器。

例如,你可以定义一个范围函数作为迭代器:

<?php

function *xrange($start, $end, $step = 1) {
    for ($i = $start; $i < $end; $i += $step) {
        yield $i;
    }
}

foreach (xrange(10, 20) as $i) {
    // ...
}


上述xrange函数具有与内建函数相同的行为,但有一点区别:不是返回一个数组的所有值,而是返回一个迭代器动态生成的值。

获取更深入的介绍请参阅 RFC

列表解析和生成器表达式

列表解析提供一个简单的方法对数组进行小规模操作:

$firstNames = [foreach ($users as $user) yield $user->firstName];


上述列表解析相等于下面的代码:

$firstNames = [];
foreach ($users as $user) {
    $firstNames[] = $user->firstName;
}


也可以这样过滤数组:

$underageUsers = [foreach ($users as $user) if ($user->age < 18) yield $user];


生成器表达式也很类似,但是返回一个迭代器(用于动态生成值)而不是一个数组。

获取更多的例子请查看 邮件列表中的公告

结束语

正如你所看到的,有很多很棒的新特征将加入到PHP5.5。不过,正如我所说的,PHP5.5还在早期的开发阶段,因此我们不确定上述新特征是否都能加入。

如果你想保持新特性更新,或者想要帮助我们讨论或开发,请订阅我们的 内部邮件列表

欢迎评论!

 

转载:http://www.oschina.net/question/157182_61259

 

 

分享到:
评论

相关推荐

    PHP5.5中文手册

    **PHP5.5中文手册**是为开发者提供的一份详尽的参考资料,它涵盖了...总之,PHP5.5中文手册是学习和开发PHP5.5应用的重要工具,它提供了全面的技术指导,帮助开发者充分利用新版本带来的优势,提升开发效率和应用性能。

    php5.5 版本

    其次,PHP 5.5带来了更好的错误处理机制,引入了异常(Exception)作为标准的错误处理方式。这使得错误处理更加统一和有序,开发者可以通过try-catch块来捕获和处理可能出现的异常,而不是依赖于传统的错误报告或...

    ecmall 升级php5.5后报错问题

    本次的主题是关于“ecmall 升级php5.5后报错问题”,这是一个典型的应用程序与新环境兼容性的问题。Ecmall是一款开源的电子商务平台,而PHP 5.5是一个流行的服务器端脚本语言版本,用于构建动态网站。当我们将Ecmall...

    ecshop2.73 php5.5版

    此外,还可能增强了系统的安全性和性能,比如对SQL注入的防护、XSS攻击的防范以及PHP 5.5带来的性能提升。 总之,ECShop2.7.3 php5.5版是一个针对PHP 5.5优化的电商系统,用户可以快速部署,无需担心兼容性问题,...

    ecshop 2.7.3 php 5.5 修改版 utf-8

    在PHP 5.5中,引入了一些重要的新特性与改进,如: 1. **OPcache**:这是一个内置的opcode缓存器,能够显著提高PHP脚本的执行速度,减少了对磁盘I/O的依赖,提高了服务器性能。 2. **intl扩展升级**:PHP 5.5中,...

    Laravel_5.5 最新版本

    Laravel 是一个基于PHP的优雅且强大的Web应用框架,而Laravel 5.5是其一个重要版本,发布于2017年,带来了许多新特性和改进。这个最新版本的Laravel 5.5,要求开发者在本地开发环境中使用PHP 7.0或更高版本,以确保...

    ecshop 2.7.3兼容php 5.5

    1. **函数替换**:由于PHP的新版本可能会废弃一些旧函数,如ereg系列函数在PHP 5.3后被弃用,所以开发者需要将这些函数替换为新的等效函数,如preg_match。 2. **错误处理**:新版本的PHP对错误处理更加严格,可能...

    Ecshop PHP5.5以上版本的都能用

    标题提到“Ecshop PHP5.5以上版本的都能用”,这意味着该软件已经更新并优化,能够兼容PHP 5.5及其更高版本,这在2014年之后的PHP版本升级背景下显得尤为重要,因为PHP的每个新版本通常会引入性能提升、安全改进和...

    php_igbinary-php5.5版本

    标题中的"php_igbinary-php5.5版本"和描述中的"php_igbinary.dll-php5.5版本"提到了两个关键概念:`igbinary`和`PHP 5.5`。`igbinary`是一个PHP扩展,而`PHP 5.5`是PHP的一个特定版本。我们将深入探讨这两个主题。 ...

    php5 5 10

    PHP 5.5系列是一个重要的里程碑,它引入了许多新特性和改进,旨在提升性能、增强功能并提高开发者体验。 在描述中提到的“应用与php5.0.0相同但有所改进”,意味着这个版本与PHP 5.0.0相比,虽然核心功能可能相似,...

    ecshop兼容php5.5版

    标题 "ecshop兼容php5.5版" 指的是ECSHOP电子商务系统已经更新或优化,以适应PHP 5.5版本的运行环境。ECSHOP是一款开源的网上商店管理系统,广泛应用于中小型企业建立自己的在线购物平台。PHP 5.5是PHP的一个重要...

    php5.5_Z.rar

    PHP5.5是PHP发展过程中的一个重要里程碑,它带来了许多新特性、优化和改进,使得开发者的工作更加高效且便捷。 **一、新特性** 1. **内置Web服务器**:PHP5.5引入了一个内置的Web服务器,这对于本地开发和测试非常...

    ecshop php5.2以上版本,php5.3 5.5 5.6均可用

    在提供的压缩包文件`ecshop_php5.5`中,很可能包含了针对PHP 5.5版本优化或修复的ECShop代码。用户在升级或部署时,只需将这个版本的ECShop覆盖到原有安装目录,然后按照常规步骤进行数据库配置和设置,就能在PHP ...

    ecshop兼容jquery php 5.3以上版本 完美兼容php 5.4 5.5

    要使用这个更新,你需要下载压缩包文件"ecshop_php5.5_jquery",解压后覆盖到你的ECShop安装目录。在升级之前,建议先备份你的现有数据和文件,以防意外。升级过程中,检查所有的插件和自定义代码是否也兼容新的PHP...

    Laravel 5.5 中文文档

    总的来说,Laravel 5.5 通过引入一系列创新特性,为PHP开发者带来了更为高效和愉快的开发体验。无论是初学者还是经验丰富的开发者,都能从这个版本中受益。配合中文文档的学习,可以更好地理解和利用Laravel的强大...

    ecshop_utf273_php5.5.rar

    PHP5.5是PHP语言的一个重要版本,它带来了许多性能上的提升和新功能的引入。相比之前的版本,PHP5.5在速度、内存消耗、错误处理等方面都有显著改进。例如,它引入了新的OPcache,可以显著提高代码执行速度;同时,...

    编程开发-编译工具-windows php5.5 64位 v5.5.zip

    本压缩包"编程开发-编译工具-windows php5.5 64位 v5.5.zip"显然是专为Windows平台上的PHP 5.5版本编译环境设计的,特别针对64位操作系统。下面我们将深入探讨PHP 5.5的特性、编译工具的作用以及在Windows环境下配置...

    php 5.3,5.4,5.5,5.6

    本文将深入探讨PHP 5.3、5.4、5.5和5.6这四个重要的版本,以及它们在Windows环境下的应用。 ### PHP 5.3 PHP 5.3是2009年发布的,引入了许多新特性和改进,如: 1. **命名空间(Namespaces)**: 这是一个重大的...

    laravel5.5中文手册

    Laravel 5.5 是 Laravel 框架的一个重要版本,它带来了许多新特性和改进,使得开发者在构建 Web 应用程序时更加高效和便捷。本手册旨在为中文用户详细介绍 Laravel 5.5 的核心概念、功能以及最佳实践。 1. **安装与...

    mysql 5.5 免费下载

    MySQL 5.5是MySQL数据库管理系统的一个重要版本,它在2010年发布,带来了许多性能提升和新特性,对于初学者和开发者而言,它是一个理想的入门选择。以下是关于MySQL 5.5的一些关键知识点: 1. **性能增强**:MySQL ...

Global site tag (gtag.js) - Google Analytics