当前位置: 首页 > 后端技术 > PHP

PHP5.3,5.4,5.5,5.6的新特性(7出来了但同样有用)

时间:2023-03-30 04:02:39 PHP

PHP5.61,可以使用表达式定义常量https://php.net/manual/zh/mig...之前在PHP版本中,必须使用静态值来定义常量、声明属性、指定函数参数的默认值。您现在可以使用数字表达式(包括数字、字符串文字和其他常量)为函数参数定义常量、声明属性和设置默认值。f()."n";echoC::SENTENCE;?>const关键字可以用来定义数组类型的常量。2.使用...运算符定义变长参数函数现在可以使用...运算符而不依赖于func_get_args()来实现变长参数函数。1[1]=>2[2]=>3)?>3。使用**执行取幂。添加正确的连接运算符以执行取幂。同时还支持简写=运算符,即求幂赋值。打印(2**3);//8$a=2;$a**=3;printf($a);//84、usefunction和useconstuseoperators可以把类中的外部函数和常量导入上去。对应的结构是usefunction和useconst。5.添加hash_equals()函数,比较耗时恒定的字符串,避免定时攻击6、在使用var_dump()输出对象时添加__debugInfo(),可以用来控制要输出的属性和值。返回值必须是一个数组。prop=$val;}publicfunction__debugInfo(){returnarray("prop"=>$this->prop);}}var_dump(newC(42));?>PHP5.51,newGeneratorsyield关键字用于当函数需要返回一个迭代器时,一个一个地返回值。functionnumber10(){for($i=1;$i<=10;$i+=1)yield$i;}这个函数的返回值是一个数组:[1,2,3,4,5,6,7,8,9,10]2.添加finally关键字最后处理流程:3.foreach支持list()。foreach支持通过list()将嵌套数组分隔成单独的变量。4,empty()支持传入任意表达式,而不仅仅是变量2135,'name'=>'John'),array('id'=>3245,'name'=>'Smith'),array('id'=>'John')5342,'name'=>'Peter'));//从结果集中获取姓名列$names=array_column($records,'name');print_r($names);//从结果集中获取姓名列结果集,使用对应的id作为key$names=array_column($records,'name','id');print_r($names);PHP5.41,newTraitshttps://php.net/manual/zh/lan...//Traits不能单独实例化,只能被类包含traitSayWorld{publicfunctionsayHello(){echo'World!';}}classMyHelloWorld{//包含SayWorld的成员useSayWorld;}$xxoo=newMyHelloWorld();//sayHello()函数是来自SayWorld组件的$xxoo->sayHello();2.新的短数组语法//原来的数组写法$arr=array("key"=>"value","key2"=>"value2");$arr=array(1,2,3,4);//缩写$arr=["key"=>"value","key2"=>"value2"];$arr=[1,2,3,4];3.支持函数printfunc()[0]返回数组的成员访问分析;4.无论php.ini中是否设置了short_open_tag,该格式始终可用。这种简短形式称为ShortOpenTag,自PHP5.3起默认启用,自PHP5.4起始终可用。这种速记对于在HTML中嵌入PHP变量非常方便。5.开发内置CLI模式的Web服务器//启动Web服务器php-Slocalhost:8000//启动时指定根目录php-Slocalhost:8000-t/home/me/public_html/foo//使用路由(Router)脚本php-Slocalhost:8000index.php//所有的请求都会被index.php处理。6.实例化时增加访问类成员(newFoo)->bar();7.增加了动态访问静态方法的方法$func="funcXXOO";A::{$func}();8,Closuresupport$this9,newbinaryliteral$bin=bindec('110011');//之前需要这样写$bin=0b110011;echo$bin;//5110,session提供上传进度支持,通过$_SESSION["upload_progress_name"]可以获取当前文件上传的进度信息,结合Ajax可以轻松实现上传进度条。11.默认使用mysqlnd。现在mysql、mysqli、pdo_mysql默认使用mysqlnd本地库。PHP5.4之前,你需要:./configure--with-mysqli=mysqlnd现在:./configure--with-mysqli12,让json更好地理解中文echojson_encode("Chinese",JSON_UNESCAPED_UNICODE);//"Chinese"13.default_charset已从ISO-8859-1更改为UTF-8。默认发送"Content-Type:text/html;charset=utf-8"PHP5.31、支持命名空间https://php.net/manual/zh/lan...2。添加后期静态绑定https://php.net/manual/zh/lan...在PHP中,我们可以在类中,使用self关键字或者CLASS来判断或者调用当前类。但是有个问题,如果我们在子类中调用,结果会是父类。因为在继承父类的时候,已经绑定了静态成员。A类{staticpublicfunctioncallFuncXXOO(){printself::funcXXOO();}staticpublicfunctionfuncXXOO(){return"A::funcXXOO()";}}B类extendsA{staticpublicfunctionfuncXXOO(){返回"B::funcXXOO";}}$b=newB;$b->callFuncXXOO();输出为:A::funcXXOO()PHP5.3.0增加了一个static关键字来引用当前类,即实现了延迟静态绑定:classA{staticpublicfunctioncallFuncXXOO(){printstatic::funcXXOO();}//...}//...这将按预期输出:B::funcXXOO3,添加goto运算符https://php.net/manual/zh/con...goto语句可能会导致程序流程不清晰,可读性减弱,但在某些情况下有其独特的便利性,例如打破深层嵌套的循环和if语句。//上面运行时会输出24,添加原生闭包(Lambda/匿名函数)支持https://php.net/manual/zh/乐趣...5。两个新的魔法方法,__callStatic和__invokehttps://php.net/manual/zh/lan...当以静态方式调用不可访问的方法时,会调用__callStatic()。尝试以与函数相同的方式调用对象时,会自动调用__invoke()方法。classA{publicfunction__invoke($str){print"A::__invoke():{$str}";}}$a=newA;$a("HelloWorld");输出是:A::__invoke():HelloWorld6。添加Nowdoc语法支持https://php.net/manual/zh/lan...8.const关键字可以用来定义类定义之外的常量https://php.net/manual/zh/lan...getMessage());}}}$foo=newTest;$foo->testing();?>11,可以动态访问Staticvariable上面运行时输出:12312,mail()函数支持记录和发送日志,日志路径可以在配置文件php.ini中设置。参数名称:mail.log