飞嗨,欢迎您的光临,本博所发布之文章皆为作者亲测通过,如有错误,欢迎通过各种方式指正。(本博已于2015.12.6升级到php7,运行环境php7 php-fpm + nginx1.8.0)

php5各个版本的新功能和新特性总结

PHP lf 3016℃ 0评论

这次停更博真是太久太久太久了,手上的事情太多了,无论是生活、工作上的。我向来喜欢追新版本,而php7.0正式版也将要与本月12号正式发布。之前,有人问过我为毛喜欢追求新版本,其实,在保证系统稳定的情况下,新版本肯定能带来性能上的提升,尤其,是新开发的产品,我的开发环境本来就是最新的。但是,也很遗憾,当再追问我,php5.6相较php5.5有什么样的更新时,我心里却是未必那么的清楚。所以,做个总结,在保证系统稳定的情况下,能够做出最正确的选择。

一、php4以及4之前

       介个,就不总结了。php4及以前也真是太老了,面向对象的支持也是乱七八糟的,反正也不会用。。。
二、php5.2以前

        __autoload函数,如果定义了该函数,当在代码中使用一个未定义类时,该函数会被调用。该函数已经不被建议使用,因为一个项目中仅能有一个这样的__autoload函数,php不允许函数重名。当使用一些类库的时候,难免会出现多个__ autoload,于是spl_autoload_register取而代之:
spl_autoload_register(function($classname)){
    require_once(“{$classname}.php”);
}
spl_autoload_register会将一个函数注册到autoload函数列表中,当出现未定义类的时候,spl会按照注册的倒序逐个调用被注册的autoload函数,可以注册多个autoload函数。(ps spl,standard php library,标准php库,被设计用来解决一些经典问题)。

          pdo和mysqli,pdo是官方推荐的,更为通用的数据库访问方式,若需要使用mysql所特有的高级功能,则应该使用mysqli

          类型约束,通过类型约束可以限制参数的类型,目前仅适用于类和callable(可执行类型)以及array,不适用于int和string

三、php5.2

          json支持,注:json_decode默认返回一个对象而非array,如需数组,第二个参数需置为true(多嘴一句,貌似在知乎上看到一个批评php语法的,这就是被吐槽的一个例子)

四、php5.3

        这个版本算是个非常大的更新,新增大量特性,也做了一些不向下兼容的修改

        被弃用的功能(若在php.ini中启用,则php运行时发出警告):

            register globals,开启后会将所有表单变量post和get注册为全局变量(php5.4被移除)
            magic quotes,会将所有用户输入进行转义(php5.4被移除)

            safe mode
         新增、改进:
             匿名函数,也叫必包(closures),经常被用来临时性地创建一个无名函数,用于回调函数等用途。$func = function($arg){print $arg;}; $func(“hello world”);匿名函数还可以用use关键字来捕捉外部变量

             魔术方法, __invoke()和__callStatic(),php面向对象提系统,提供若干魔术方法,用于实现类似其他语言中的重载。invoke在把一个对象作为函数时被调用。$a=new A();$a(‘hello world’)。callStatic会在调用一个不存在的静态方法时被调用。
             命名空间

             heredoc和nowdoc,heredoc以三个左尖括号开始,后面跟标识符,直到同一个顶格的标识符(不能缩紧)结束。就像双引号一样,可以嵌入变量。nowdoc像一个但引号字符串,不能再其中嵌入变量。和heredoc唯一的区别是,三个尖括号后标识符要以单引号括起来。

              使用const定义常量
              三元运算符简写形式,$a?:’no value’

              phar,即php archive,起初只是pear中的一个库而已,后来在php5.3被重新编译成c扩展并内置到php中。phar用来将多个php脚本打包(也可以打包其他文件)成一个.phar的演说文件,母的在于模仿java的jar。phar文件可以像php文件一样被php引擎解析执行。同时还可以使用require(‘phar://x.phar/dir/ox.php’);

 五、php5.4

              short open tag,自php5.4默认开启。<? …?> ,<?=$a;?>。对于纯php文件,php官方建议顶格写起始标记,同时省略结束标记。这样可以确保整个php文件都是php代码,没有任何输出,否则当包含该文件后,设置header和cookie会遇到一些麻烦

              [],数组简写形式

                traits,所谓traits就是构件,是用来替代继承的一种机制。php中无法进行多重继承,但一个类可以包含多个traits
                

/traits不能被单独实例化,只能被类所包含
trait SayWorld{
      public function sayHello(){
           echo 'world';
      }
}

class MyHelloWorld{
      use SayWorld;//将sayworld中的成员包含进来
}
$a = new MyHelloWorld();
$a->sayHello();

traits还有很多神奇的功能,比如包含多个traits,解决冲突,修改访问权限,为函数设置别名等。traits中也同样可以包含traits

              内置web服务器,php -S localhost:8000,就可以通过localhost:8000 来访问。很多应用中都会进行url重写,所以php提供了一个设置路由脚本的功能php -S localhost:8000 index.php则所有的请求都会由index.php来处理

              新增动态访问静态方法的方式 $func = ‘sss';A::{$func}();,新增在实例化时访问类成员的特征(new ClassA)->xxoo();新增支持对函数返回数组成员访问的解析print func()[0]          

六、php5.5

            yield关键字用于当函数需要返回一个迭代器的时候,逐个返回值

            list()可以用于foreach中解析嵌套的数组$array=[[1,2,3],[4,5,6]];foreach( $array as list($a,$b,$c) ){echo {$a}{$b}{$c}.”\n”}

            不推荐使用mysql函数,推荐使用pdo和mysqli,不再支持winxp,可以用myclass:class取到一个类的完整限定名(包括命名空间),empty支持表达式作为参数,try-catch结构新增finally块

七、php5.6

            更好的常量。const A=1;const B = A=1;

            更好的可变函数参数。用于代替func_get_args(), 

function add(...$args){
   foreach($args as $ars){
      ... 
   }
}

            命名空间,支持常量和函数

转载请注明:飞嗨 » php5各个版本的新功能和新特性总结

喜欢 (3)or分享 (0)
发表我的评论
取消评论

表情
(1)个小伙伴在吐槽
  1. Hi all :razz:
    匿名2019-09-08 05:21 回复
粤ICP备15018643号-1