(点击上方公众号,可快速关注)
作者:伯乐在线 - 徐汉彬
网址:http://blog.jobbole.com/91735/
一、总结
该RFC建议添加4种新的标量类型声明:int,float,string和bool,这些类型声明将会和PHP原来的机制保持一致的用法。RFC更推荐给每一个PHP文件,添加一句新的可选指令(declare(strict_type=1);),让同一个PHP文件内的全部函数调用和语句返回,都有一个“严格约束”的标量类型声明检查。此外,在开启严格类型约束后,调用拓展或者PHP内置函数在参数解析失败,将产生一个E_RECOVERABLE_ERROR级错误。通过这两个特性,RFC希望编写PHP能够变得更准确和文档化。
二、细节
标量类型声明:
没有添加新的保留字。int、float、string和bool会被识别为类型声明,同时禁止用作class/inte**ce/trait等的命名。新的用户标量类型声明,通过内部的Fast Parameter Parsing API实现。
strict_types/declare()指令
默认情况下,所有的PHP文件都处于弱类型校验模式。新的declare指令,通过指定strict_types的值(1或者0),1表示严格类型校验模式,作用于函数调用和返回语句;0表示弱类型校验模式。
declare(strict_types=1)必须是文件的第一个语句。如果这个语句出现在文件的其他地方,将会产生一个编译错误,块模式是被明确禁止的。
类似于encoding指令,但不同于ticks指令,strict_types指令只影响指定使用的文件,不会影响被它包含(通过include等方式)进来的其他文件。该指令在运行时编译,不能修改。它的运作方式,是在opcode中设置一个标志位,让函数调用和返回类型检查符合类型约束。
参数类型声明
该指令影响全部的函数调用,例如(严格校验模式):
Tag标签: