最新的PHP版本更新迭代非常快,很多小伙伴都学不会。而且由于文档有一定的滞后性,阅读全英文RFC也有点门槛。所以这篇文章想教给大家一个快速全面了解新功能的技巧。技巧说起来很简单,看PHP源码中的单元测试。因为单元测试要考虑的场景非常多,用例非常全面。有些在文档中没有详细说明的东西,在单元测试代码中可以清楚的体现出来。话不多说,开始干活。下载源码gitclonehttps://github.com/php/php-src看单元测试每个扩展的单元测试在ext/extension/tests中,以phpt后缀结尾的文件是单元测试文件。内嵌功能的单元测试在Zend/tests。Zend/tests/arrow_functions目录下以箭头函数为例,查看001.phpt中的内容--TEST--Basicarrowfunctionfunctionalitycheck--FILE--1;var_dump($foo());$foo=fn($x)=>$x;var_dump($foo(2));$foo=fn($x,$y)=>$x+$y;var_dump($foo(1,2));//结束$var$var=4;$foo=fn()=>$var;var_dump($foo());//不结束$var,it'saparameter$foo=fn($var)=>$var;var_dump($foo(5));//按值关闭$var,而不是按引用$var=5;$foo=fn()=>++$var;var_dump($foo());var_dump($var);//嵌套箭头函数关闭变量$var=6;var_dump((fn()=>fn()=>$var)()());var_dump((fn()=>function()use($var){return$var;})());?>--EXPECT--int(1)int(2)整数(3)整数(4)整数(5)整数(6)整数(5)整数(6)整数(6)分为三段:第一段,本次测试的主题描述--TEST--。第二段,本次单测的PHP代码--FILE--。第三段,本次单测的预期输出,如果预期输出是错误使用--EXPECTF--,否则使用--EXPECT--PHP源码中的单元测试基本上都是这种格式。第一个单体测试用例是测试箭头函数的基本使用是否达到预期,很简单,例子我就不细说了。查看箭头函数的其他用例,第二个单独的测试文件:--TEST--Arrowfunctionsimplicitusemustbethrowingnoticesonlyuponactualuse--FILE--$b+$c)());?>--EXPECTF--Warning:Undefinedvariable$cin%sonline%dint(1)也很简单,目的是告诉我们定义时一个箭头函数,使用未定义的变量是不会报错的,只有在实际使用的时候才会报错。也就是说:$a+$b;这样不会报错,只有下面的代码会报错。$a+$b;$func();这种细节在RFC中好像没有提到,只能通过单元测试代码才能注意到。有兴趣的同学可以选几个新功能的单测看看。看完之后,保证你有所收获,对新函数、新语法有更全面的了解。
