在php7主要新特点浅谈
预览新特性
Zend引擎升级为Zend引擎3,所谓的PHP NG
添加一个抽象语法树,使编译更科学
64位int支持
统一的变量语法
TLS的原声-意义扩展的发展
Foreach循环改进的一致性
新建的、**的、、 . }运算符
添加返回类型的声明
添加标量类型的声明。
异常可以捕获核心错误。
增加上下文敏感词法分析
除去一些特征
1。删除一些旧的扩展和迁移到PECL(例如:MySQL)
2。除去SaPIs支持
已删除了诸如3、<和< PHP >等标签。
4.16波段字符串转换被取消。
/ / PHP5
0x10= =16
/ / php7
0x10!=16
5.http_raw_post_data已被删除(可由PHP: / /输入)
6。静态函数不再通过非兼容函数调用非静态函数来支持。
$ O =新的类名{ },不再支持这样的写作
的7.php.ini文件作为#注释去掉,统一的评论;
行为的一些变化
不要在支持函数中定义同名参数。
不推荐同名构造函数的类型(当前不删除,后面删除)
这些关键字,如字符串、int、浮点等,不能用作类名。
func_get_args()获取当前变量的值
函数测试($){
美元+;
var_dump(func_get_args(){ 0 });
};
测试(1)
/ / PHP5
Int(1)
/ / php7
Int(2)
在这里,我们选择了一些主要的、核心的功能介绍一些我们PHPer的更重要的特征
PHP NG
新的PHP引擎已经在很多地方进行了优化,也正是由于php7的表现已经高出近两倍PHP5的性能。
机制重构
左边是变量(24字节)PHP5和变量,右边(16字节)的权利。
可以看出,php7的机制比PHP5更复杂,但可以从24字节下降到16字节。这是怎么一回事
在C语言中,结构体每个成员变量应该占据一个单独的内存空间,而联盟的成员变量是一个存储空间共享(php7是大量由工会代替)。因此,虽然成员变量看起来更多,内存空间,实际上是占用大量公共下降。
一个新的Zend阵列取代以前的hashtale结构
我们PHP程序中最常用、最有用、最方便、最灵活的程序是数组。和PHP5的底部HashTable。php7采用了新的Zend的数组类型,其性能和访问速度都有了很大的提高。
一些最常用的,不太昂贵的功能直接成为引擎支持的操作码
call_user_function(_array)= > zend_init_user_call
is_int / / / *字符串数组= > zend_type_check
zend_strlen strlen = >
定义= > Zend +定义
采用新的内存分配、管理模式,减少了内存的浪费。
核心zend_sort优化排序
/ / php5的快速排序(非稳定排序)
数组(1 = 0, 0 = 0)
/ / php7 -快速排序+选择性排序(稳定排序)
数组(0 = 0, 1 = 0)
选择和排序的元素少于16个,大于16个。它们是按16个单位分割的。它们分别被分类和排序。然后将它们组合起来使用快速排序,与以前的排序相比,内部元素从不稳定排序到稳定排序的排序减少了交换元素的数量,减少了内存操作次数,并提高了40%的性能。
抽象语法树
如果我们有这样的要求,现在,我们要检查PHP源文件的语法和执行代码的规范。在PHP5,没有AST、和操作码是从解析器直接生成!你需要使用PHP解析器来实现一些外部;而php7增加AST,我们可以去实现这样的扩展,利用扩展功能提供了可以直接访问相应的AST结构的文件,这个结构是我们可以识别的,所以我们可以在这个基础上做了一些优化和判断。
64位int支持
支持存储2GB以上的字符串
支持上传大于2GB的文件
确保字符串是64位在所有平台(64位)
统一的语法变量
美元'bar } { 'baz foo {}
/ / PHP5
($ Foo){ 'bar} { 'baz}
/ / php7:遵循原则,右左
$ { $ foo { 'bar} { 'baz} }
foreach循环改进
/ / PHP5
美元=阵列(1, 2, 3);foreach($一$ V){ var_dump(电流($));}
Int(2)
Int(2)
Int(2)
美元=阵列(1, 2, 3);$ = $($美元;foreach { var_dump(V)电流($));}
Int(2)
Int(3)
Bool(假)
美元=阵列(1, 2, 3);$ = $($美元;foreach { var_dump(V)电流($));}
Int(1)
Int(1)
Int(1)
/ / php7:数据的内部指针不再操纵
美元=阵列(1, 2, 3);foreach($一$ V){ var_dump(电流($))}
Int(1)
Int(1)
Int(1)
美元=阵列(1, 2, 3);$ = $($美元;foreach { var_dump(V)电流($))
Int(1)
Int(1)
Int(1)
美元=阵列(1, 2, 3);$ = $($美元;foreach { var_dump(V)电流($))}
Int(1)
Int(1)
Int(1)
一些额外的运营商
大小比较两个数字:1 {前者比后者,0:前者等于后者,1:前者比后者}
回声12; - 1
回声11; / 0
回声10; / 1
**。
回声2**3;8
-三元/操作员改进
/ / PHP5
_get美元{ 'name' } { $ _get 'name' }:'; / /注意:未定义的索引:…
/ / php7
_get美元{ 'name' }- >;
分析unicode字符
回声 U { 4f60 } ; / /你
回声 U { 65b0 } ; / /新
申报类型
功能:int {()返回一个值
回归测试;
};
GetInt();
/ / PHP5
# PHP语法错误:语法错误,应为{…
/ / php7
#致命错误:Uncaught TypeError:返回值getInt()必须是类型
标量类型的声明
函数库中的函数(int,int num美元):{
返回$;
};
getInt(测试);
/ / PHP5
# PHP开捕致命错误:参数1通过getInt()必须是一个实例。
/ / php7
#致命错误:Uncaught TypeError:论点1通过getInt()必须的。
异常可以捕获核心错误。
{试
non_exists_func();
} catch(engineexception e){
回声异常:{ $ E -> GetMessage();} ;
}
/ /在php7尝试捕捉失败,但哥哥说是可行的…
#例外:调用未定义的函数non_exists_func()
上下询问敏感词法分析
/ / PHP5
类集合{ public函数foreach($ ARR){ } }
#解析错误:语法错误,希望`标识符(t_string)…
/ / php7
类集合{
公共函数foreach($ ARR){ }
公共功能($ ARR){ }
公共函数($){ }
公共函数顺序(条件){ }
}
集合=新集合();
为收集->在()-()- > >在foreach()->命令();
几乎,基本上,我已经完成了我最初的评论php7。肯定有许多错误和低级错误。我希望你的兄弟能及时纠正,这样我就可以改变他们做笔记。嘿 uff01