热门资讯

更快的发布周期1.命名空间(Namespaces)

PHP5.3介绍PHP2008魁北克-IliaAlshanetsky.新版本的特性*兼职老版本下的代码*重点主要放在现有的功能的改进*更少的bug*更快的发布周期1.命名空间(Namespaces)*PHP5.3最大的新功能*完全支持名字空间特征*大部分的功能的执行在编译时*简化命名惯例1)更清晰的代码不使用NamespacesfunctionMY_wrapper(){}classMY_DB{}define(”MY_COMM_STR”,””);MY_wrapper();newMY_DB();MY_COMM_STR;2)使用NamespacesnamespaceMY;functionwrapper(){}classDB{}constCONN_STR=””;useMYASMY;wrapper();newDB();CONN_STR;3)一个文件中多个名字空间namespaceLIB;classMYSQL{}classSQLite{}$b=newSQLite(;namespaceLIB_EXTRA;classMScrypt{}$anewMScrypt();var_dump(get_class($a),get_class($b)};//result://string(18)LIB_EXTRA::MScrypt//string(11)LIB::SQLite4)名字空间的层级namespacefoo;functionstrlen($foo){returnhtmlspecialchars($foo);}echostrlen(test);//testecho::strlen(test)//4echonamespace::strlen(test);//test*function,class和constant引用在一个名字空间中首先指向这个名字空间,其次才是一个全局的范围5)名字空间自动引入function__autoload($var){var_dump($var);}//LIB::foorequire./ns.php;/**?phpnamespaceLIB;newfoo();?*/*__autoload()将处理为和名字空间的类名一起。*autoload仅在class不在名字空间和全局范围内存在时触发。*__autoload()声明在一个名字空间中将不别调用!6)其他的名字空间的语法技巧namespacereally::long::pointlessly::verbose::ns;__NAMESPACE__;//当前的名字空间名称classa{}get_class(newa());//really::long::pointlessly::verbose::ns::absusereally::long::pointlessly::verbose::ns::aASb;//从一个名字空间引用class2.改进的性能*md5()速度提高了大概10-15%*引擎中更好的堆栈实现*常量移到只读内存区*改进Exception处理(更简单更少的代码)*调用(require/include)_once去掉了使用open(2)(linux下的c函数)*使用gcc4编译的二进制更小更快整体性能提高5-15%3.新的语言特性1)__DIR__*引入__DIR__magic常量定位脚本的目录echodirname(__FILE__);//PHP5.3/*vs*/echo__DIR__;//=5.32)?:操作符*允许从2个值的or/and表达式快速的获取一个非空的值$a=true?:false;//true;$a=false?:true;//true;$a=?:1;//1$a=0?:2;//2$a=array()?:array(1);//array(1);$a=strlen()?:strlen(a);//13)__callStatic()*等价于__call(),但它是为调用静态方法准备的classhelper{staticfunction__callStatic($name,$args){echo$name.”(”.implode(”,”$args).”)”;}}helper::test(foo,bar);//test(foo,bar);//动态的函数/方法调用有点慢…4)动态的调用静态方法*php现在允许动态的调用静态的方法classhelper{staticfunctionfoo(){echo__METHOD__;`}}$a=helper;$b=foo;$a::$b();//helper::foo//动态的函数/方法调用有点慢…5)延迟静态绑定*静态处理从编译时延迟到执行时classA{publicstaticfunctionwhoami(){echo__CLASS__;}publicstaticfunctionidentity(){self::whoami();}}classBextendsA{publicstaticfunctionwhoami(){echo__CLASS__;}}B::identity();//A–php5.3classA{publicstaticfunctionwhoami(){echo__CLASS__;}publicstaticfunctionidentity(){static::whoami();}}classBextendsA{publicstaticfunctionwhoami(){echo__CLASS__;}}B::identity();//B–php=5.3*小心使用操作码缓存,没有向后兼容6)MySQLInd*特殊的,高速的专门为PHP设计的MySQL调用库接口*更好的性能*内存的使用优化*内置的驱动(不是适应性的再次扩展)*ManyfutureoptionsduetotightintegrationwithPHP*目前还没有PDO_MySQL支持mysql(i)onlyfornow7)INIMagic*CGI/FastCGI支持.htaccess形式的INI控制*用户可以自己设定每个目录的INI在php.ini中通过[PATH=/var/]设定*优化错误处理*允许用户使用INI变量和常量任何定义的INI文件中*其他几个小的优化用户自定义的php.ini(.htaccess)文件名.默认为.user.iniuser_ini.filename=.user.ini禁止这个特性设置这个选项为空值用户自定义php.ini的缓存失效期(time-to-live)秒数.默认is300s(5分钟)user_ini.cache_ttl=300s[PATH=/var/]variables_order=GPCsafe_mode=1[myvaribles]somevar=1234anothervar=${somevar};anothervar==somevar[iniarrays]foo[bar]=1foo[123]=2foo[]=38)扩展的OpenSSL函数*使用OpenSSLDigest函数foreach(openssl_get_md_methods()as$d){//MD4,MD5,SHA512…(12allinall)echo$d.-.openssl_digest(foo,md5);//acbd18db4cc2f85cedef654fccc4a4d8}*使用OpenSSL加密函数//BF-CBC,AES-256CFB1…(54allinall)foreach(openssl_get_cipher_methods()as$v){$val=openssl_encrypt(value,$v,secret);openssl_decrypt($val,$v,secret);//value}*扩展的openssl_pkey_new()和openssl_pkey_get_details()函数允许访问内部的DSA,RSA和DH密匙.其目标在PHP中实现一个简单的OpenId9)SPL(StandardPHPLibrary)优化*优化嵌套的目录迭代次数由文件系统迭代*引入GlobIterator*各种各样的数据结构类:双链表,堆栈,队列,堆,小型堆,大型堆,优先级队列*其他的很绕口的一些特征10)时间处理进行扩展了和添加*可控制的strtotime()由date_create_from_format()实现$date=strtotime(08-01-0700:00:00);var_dump(date(Y-m-d,$date));//string(10)2008-01-07$date=date_create_from_format(m-d-y,08-01-07);var_dump($date-format(”Y-m-d”));//string(10)2007-08-01*添加了date_get_last_errors(),并且返回时间语法分析的错误和警告array(4){[warning_count]=int(0)[warnings]=array(0){}[error_count]=int(2)[errors]=array(2){[2]=string(40)Theseparationsymbolcouldnotbefound[6]=string(13)Trailingdata}}11)getopt()优化*影响Windows平台*本地的执行不依赖于本地getopt()实现.*跨平台支持长选项(–option)//input:–a=foo–b–cvar_dump(getopt(,array(a:,b::,c)));/*output:array(3){[a]=string(3)foo[b]=bool(false)[c]=bool(false)}*/12)XSLTProfiling*引入XsltProfiling通过setProfiling()实现$xslt=newxsltprocessor();$xslt-importStylesheet($xml);$xslt-setProfiling(/tmp/profile.txt);$xslt-transformToXml($dom);ResultingIn:numbermatchnamemodeCallsTot100usAvg0date55811Total55813)E_DEPRECATED标记*怎么样将一个php发行为一个没有错误的模式?废弃*E_DEPRECATED用来指定废弃的功能,或许未来的版本中会消除。14)垃圾回收器*为复杂和长时间运行脚本的执行结束周期释放内存的清理gc_enable();//允许垃圾回收var_dump(gc_enabled());//truevar_dump(gc_collect_cycles());//某个元素的清理gc_disable();//禁止垃圾回收15)NOWDOC*一个HEREDOC不再进行转译HEREDOC$foo=ONEthisis$fubarONE;/*string(10)thisis*/NOWDOC$bar=TWOthisis$fubarTWO;/*string(16)thisis$fubar*/4.其他优化*SQLite升级到3.5.6*40多个bug被修复*CGI/FastCGISAPI优化*各种流的优化*未来更多的优化<

发表评论

电子邮件地址不会被公开。 必填项已用*标注

相关文章