1 人参与回答

以前

autoload的使用;当在代码中使用一个未定义的类的时候,该函数就会被调用

现在已经不再使用了,因为一个项目中只能有一个__autoload();现在使用spl_autoload_register();

PDO和MiSQLi的使用

类型约束。

通过类型约束可以限制参数的类型,不过这个机制不完善。

2.

(2006-2011)

JSON的支持

  增加了json_encode(),json_decode()等函数

(2009-2012)

算是一个非常大的更新,新增了大量新特征,同时也做了一些不向下兼容的修改

弃用的功能

匿名函数

$func=function($arg){

echo $arg;

}

$func('hello');

新增了魔术方法 __invoke(),__callStatic();

随着匿名函数的加入,PHP 引入了一个新的魔术方法 __invoke().

该魔术方法会在将一个对象作为函数调用时被调用:

class A

{

public function __invoke($str)

{

print "A::__invoke(): {$str}";

}

}

$a = new A;

$a("Hello World");

输出毫无疑问是: A::__invoke(): Hello World

__callStatic() 则会在调用一个不存在的静态方法时被调用。

命名空间

// 命名空间的分隔符是反斜杠,该声明语句必须在文件第一行。

// 命名空间中可以包含任意代码,但只有 **类, 函数, 常量** 受命名空间影响。

namespace XXOO\Test;

// 该类的完整限定名是 \XXOO\Test\A , 其中第一个反斜杠表示全局命名空间。

class A{}

// 你还可以在已经文件中定义第二个命名空间,接下来的代码将都位于 \Other\Test2 .

namespace Other\Test2;

// 实例化来自其他命名空间的对象:

$a = new \XXOO\Test\A;

class B{}

// 你还可以用花括号定义第三个命名空间

namespace Other {

// 实例化来自子命名空间的对象:

$b = new Test2\B;

// 导入来自其他命名空间的名称,并重命名,

// 注意只能导入类,不能用于函数和常量。

use \XXOO\Test\A as ClassA

}

后期静态绑定

#self 的语义本来就是“当前类”

class A

{

static public function callFuncXXOO()

{

print static::funcXXOO();

}

// ...

}

二.php7的新特性

./bin/php -v #查看PHP版本

./bin/php -m #查看安装的模块

1.变量类型

function test(int $a,string $b,array $c):int{

}

2.错误异常

try/catch

使用栈内存

节约了内存分配

php5

zval*val;make_std_zval(val);

php7 zval val;