QCon全球软件开发大会8折优惠倒计时最后3天,购票立减¥1760!了解详情 >>> 了解详情
写点什么

PHP 5.4 弃 Register Globals 增 Traits

2012 年 3 月 12 日

PHP 5.4 于本月尘埃落定,它是 PHP 自 2009 年以来的首次重大更新。该版本对语言部分进行了增强,包括支持 Traits 和移除部分争议特性。

Traits

同 Java 和.NET 一样,PHP 使用单一继承模型。虽然这种模型足够应付大部分用例场景,但有时用户也需要将一些通用样板代码放置其他无关联的类中。(.NET 的Dispose 方法就是这类样板代码(boiler-plate code)中一个很好的例子。)为解决这样的问题,PHP5.4 推出了 Traits

Traits 是一个方案集合,它不属于任何实际类。用户没法创建 Trait 实例或直接调用 Trait 中的方法,相反,用户必须将 Traits 合并到实际的类当中方能使用它们。在优先级方面,Trait 方法会覆盖继承而来的同名方法,而当前合并类中的同名方法则会覆盖 Trait 方法。

Traits 之间拥有相同的优先级,因此默认情况下,将两个包含重叠方法名的 Traits 加入到相同类中是个错误的做法。当然,使用“insteadof”和“as”操作符可以手工解决冲突,从而避免这个错误。此外,“as”操作符还可以用于改变 Trait 的可见性(visibility)。

Traits 中的方法可以是抽象方法,用于支持 Traits 的部分泛化;同时,Traits 也可以对外暴露静态变量,每个包含 Traits 的类都将拥有该变量的一份拷贝。此外,在 Traits 中已经声明过的属性不可以再在包含它的类中声明。

其他语法改进

其他语法改进包括:

  • 数组现在可以使用方括号进行声明,而不再需要使用“array”函数。新的声明方式除了略微简洁之外,没有其他影响;
  • 现在可以直接对函数返回值进行数组取值。在此之前,函数返回值的结果必须先存入一个临时变量中,如:$FirstName = GetNames()[0];
  • PHP 5.4 中的闭包现在可以使用“$this”指针,这在以前是不可以的;
  • 现在可以在实例化时访问类成员,如: (new CustomerService)->Delete(customerId);
  • 采用“0b”前缀标识二进制数。

命令行 Web 服务器

PHP 5.4 提供了自己的 Web 服务器,你可以从命令行中启动它。该 Web 服务器的设计目的仅在于帮助开发,它不会取代你的生产 Web 服务器。

弃用特性

备受指责的 Register Globals 已从 PHP 中完全删除。十年来,该特性一直以其频繁发生的安全漏洞而著称。2002 年该特性被设置为默认关闭。2009 年发布的 PHP5.3 将该特性标记为“弃用”,想必从那时起,大部分开发人员已经不再使用它。

从 PHP 中移除的另一个不讨喜的特性是 Magic Quotes 。Magic Quotes 本意是对字符串进行自动转义(escape)以试图避免 SQL 注入攻击。但是由于字符串的转义使用方法常与特定背景相关,因此,比起试图解决的问题,它反而造成了更多的问题。该特性同 Register Globals 一样,也在 2009 年被标记为“弃用”。

PHP 中的 break continue 语句之后可以跟上一个参数用来指明跳出的循环层数。如果不指定参数,它会像 VB、C#或 Java 一样跳出最内层的循环。在 PHP 5.4 之前,开发人员可以向 break 语句传递一个变量,而现在只能传递常量。

PHP 允许参数按引用传递。在早期版本中,你可以通过为调用点添加修饰来指明变量按引用传递。在 PHP 5.4 中,该选项已被移除。相反,现代 PHP 编程只需要在函数声明时指定按引用传递即可。与 C#不同,你不需要同时在声明和调用点指定按引用传递。

查看英文原文: http://www.infoq.com/news/2012/03/PHP-5.4

2012 年 3 月 12 日 10:042140
用户头像

发布了 125 篇内容, 共 29.8 次阅读, 收获喜欢 2 次。

关注

评论

发布
暂无评论
发现更多内容

训练营第十二周作业 1

仲夏

week7 性能优化(一) 作业和学习总结

杨斌

HiveQL分析

天天向上

极客大学架构师训练营

TronChain波场链系统APP开发|TronChain波场链软件开发

开發I852946OIIO

系统开发

第八周作业

Griffenliu

架构师训练营第 12 周课后练习

薛凯

hashmap 是如何炼成的

哈希说

数据结构

架构师训练营 week8 学习总结

花果山

极客大学架构师训练营

【架构师训练营第 1 期 12 周】 学习总结

Bear

极客大学架构师训练营

第12周 作业

Pyr0man1ac

第三周学习总结

J

极客大学架构师训练营

训练营第十二周作业 2

仲夏

架构师训练营 week8 课后作业

花果山

极客大学架构师训练营

量化交易软件系统开发|量化交易APP开发

开發I852946OIIO

系统开发

周练习 12

何毅曦

第十二周

Geek_ce484f

极客大学架构师训练营

第十二周 数据应用(一)作业

钟杰

极客大学架构师训练营

第十二周 数据应用(一)

9527

架构师训练营第 8 周课后练习

菜青虫

极客大学架构师训练营

架构师训练营第 8 周学习总结

菜青虫

极客大学架构师训练营

大数据应用总结一

天天向上

极客大学架构师训练营

架构师训练营第 1 期第 12 周作业

好吃不贵

极客大学架构师训练营

用户观看视频业务出现花屏故障

极客时间架构 1 期:第 12 周 数据应用(一) - 学习总结

Null

极客时间架构 1 期:第 12 周 数据应用(一) - 命题作业

Null

week8性能优化(二)作业和学习总结

杨斌

第十二周作业

TheSRE

极客大学架构师训练营

「架构师训练营第 1 期」第十二周作业

张国荣

链表合并问题

jorden wang

架构师训练营第 11 周课后练习

薛凯

极客大学 - 架构师训练营 第十二周作业

9527

移动应用开发的下一站

移动应用开发的下一站

PHP 5.4弃Register Globals增Traits-InfoQ