PHP 5.5 将会带来哪些新特征-PHP接触-PHP教程-幽默笑话

您现在的位置:文学大全 > 当代诗歌,time:2019-07-08 13:50
上一篇:随着稳地价、稳房价、稳预期的房地产调控思路的深入,房地产市场明显稳定 如何判断效应器和感受器 下一篇:没有了

PHP 5.5 将会带来哪些新特征-PHP接触-PHP教程-幽默笑话

文章内容将会带来哪些新特征修改时间:[2012/07/1708:45]阅读次数:[858]发表者:[沩筱]在四个月前发布了,现在来看PHP下一个版本似乎早了点,但我还是想给大家透露一些将会带哪些新特征。 注意一点:还在早期的开发阶段,所以没有人知道最终的结果是什么样的。

所有我在这里谈论的都只是提案。 也就是说,不是所有下面列出的新特征都会加入。

所以,不要太兴奋:)新特性及提案列表都相当大,而且不是按重要性排序。 所以,如果你不想通读一遍的话,这里有四个特点我个人是最兴奋的:现在,让我们来看看可能会新增的功能:不再向后兼容首先,我们将有两个变化:1、放弃对WindowsXP和2003的支持将不再支持WindowsXP和2003,这些系统已经有十年的历史,所以PHP将不再提供支持。

2、弃用e修饰符e修饰符是指示preg_replace函数用来评估替换字符串作为PHP代码,而不只是仅仅做一个简单的字符串替换。 不出所料,这种行为会源源不断的出现安全问题。 这就是为什么在中使用这个修饰符将抛出一个弃用警告。

作为替代,你应该使用preg_replace_callback函数。

你可以从RFC找到更多关于这个变化相应的信息。 新增函数和类接下来,我们将看到在计划之中的新增函数和类:boolval()PHP已经实现了strval、intval和floatval的函数。 为了达到一致性将添加boolval函数。 它完全可以作为一个布尔值计算,也可以作为一个回调函数。 hash_pbkdf2()PBKDF2全称“Password-BasedKeyDerivationFunction2”,正如它的名字一样,是一种从密码派生出加密密钥的算法。

这就需要加密算法,也可以用于对密码哈希。

更广泛的说明和用法示例,请参阅RFC。

intl扩展将有许多改进intl的扩展。

例如,将会有新的IntlCalendar,IntlGregorianCalendar,IntlTimeZone,IntlBreakIterator,IntlRuleBasedBreakIterator,IntlCodePointBreakIterator类。

之前,我竟然不知道有这么多关于intl扩展,如果你想知道更多,我建议你去最新公告里找Calendar和BreakIterator。 array_column()有一个提议,新增array_column(或array_pluck)函数,它的表现如下:$userNames=array_column($users,name//isthesameas$userNames=[];foreach($usersas$user){$userNames[]=$user[name}像这样从数据库获取一列,但返回是数组。 一个简单的密码散列API最近的密码泄漏(从LinkedIn等)显示,即使是大型网站也不知道如何正确地散列密码。

几年前人们一直提倡使用bcrypt,但大多数人似乎仍然是使用完全不安全的sha1哈希值。 我们认为这样做的原因可能是真的很难使用crypt函数的API。

因此我们会采用一个新的、简单的API,用于安全的密码散列:$password=foo//creatingthehash$hash=password_hash($password,PASSWORD_BCRYPT);//verifyingapasswordif(password_verify($password,$hash)){//passwordcorrect!}else{//passwordwrong!}新的散列API提供了一些更多的特性,请参阅RFC。

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

常量引用“常量引用”意味着数组可以直接操作字符串和数组字面值。 举两个例子:functionrandomHexString($length){$str=for($i=0;$i$length;++$i){$str.=0123456789abcdef[mt_rand(0,15)];//directdereferenceofstring}}functionrandomBool(){return[false,true][mt_rand(0,1)];//directdereferenceofarray}我不认为在实践中会使用此功能,但它使语言更加一致。 请参阅RFC。 调用empty()函数(和其他表达式)一起工作目前,empty()语言构造只能用在变量,而不能在其他表达式。

在特定的代码像empty($this-getFriends())将会抛出一个错误。

作为这将成为有效的代码。

更多信息请参阅RFC。 获取完整类别名称中引入命名空间的别名类和命名空间短版本的功能。

虽然这并不适用于字符串类名称:useSome\Deeply\Nested\Namespace\FooBar;//doesnotwork,becausethiswilltrytousetheglobal`FooBar`class$reflection=newReflectionClass(FooBar为了解决这个问题采用新的FooBar::class语法,它返回类的完整类别名称:useSome\Deeply\Nested\Namespace\FooBar;//thisworksbecauseFooBar::classisresolvedtoSome\\Deeply\\Nested\\Namespace\\FooBar$reflection=newReflectionClass(FooBar::class);更多示例请参阅RFC。 参数跳跃如果你有一个函数接受多个可选的参数,目前没有办法只改变最后一个参数,而让其他所有参数为默认值。

RFC上的例子,如果你有一个函数如下:functioncreate_query($where,$order_by,$join_type=,$execute=false,$report_errors=true){...}那么有没有办法设置$report_errors=false,而其他两个为默认值。 为了解决这个跳跃参数的问题而提出:create_query(deleted=0,name,default,default,false);我个人不是特别喜欢这个提议。 在我的眼睛里,代码需要这个功能,只是设计不当。

函数不应该有12个可选参数。

标量类型提示标量类型提示原本计划进入,但由于缺乏共识而没有做。 获取更多关于为什么标量类型提示没有做进PHP的信息,请参阅:标量类型提示比你认为的更难。 对于而言,针对标量类型提示讨论又一次出现,我认为这是一个相当不错的提议。 它需要通过输入值来指定类型。 例如:123,,“123”都是一个有效的int参数输入,但“helloworld”就不是。

这与内部函数的行为一致。 functionfoo(int$i){...}foo(1);//$i=1foo();//$i=1foo(1);//$i=1foo(1abc);//notyetclear,maybe$i=1withnoticefoo();//notyetclear,maybe$i=1withnoticefoo([]);//errorfoo(abc);//errorGetter和Setter如果你从不喜欢写这些getXYZ()和setXYZ($value)方法,那么这应该是你最受欢迎的改变。 提议添加一个新的语法来定义一个属性的设置/读取:classTimePeriod{public$seconds;public$hours{get{return$this-seconds/3600;}set{$this-seconds=$value*3600;}}}$timePeriod=newTimePeriod;$timePeriod-hours=10;var_dump($timePeriod-seconds);//int(36000)var_dump($timePeriod-hours);//int(10)当然还有更多的功能,比如只读属性。 如果你想要知道更多,请参阅RFC。 生成器目前,自定义迭代器很少使用,因为它们的实现,需要大量的样板代码。 生成器解决这个问题,并提供了一种简单的样板代码来创建迭代器。 例如,你可以定义一个范围函数作为迭代器: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($usersas$user)yield$user-firstName];上述列表解析相等于下面的代码:$firstNames=[];foreach($usersas$user){$firstNames[]=$user-firstName;}也可以这样过滤数组:$underageUsers=[foreach($usersas$user)if($user-age18)yield$user];生成器表达式也很类似,但是返回一个迭代器(用于动态生成值)而不是一个数组。 获取更多的例子请查看邮件列表中的公告。

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


编辑推荐

友情链接