php版本个版本区别,php5各个版本的区别

本文目录:

PHP5.2 以前:autoload, PDO 和 MySQLi, 类型约束

PHP5.2:JSON 支持

PHP5.3:弃用一些功能、匿名函数,新增魔术方法,命名空间,后期静态绑定,Heredoc 和 Nowdoc, const, 三元运算符,Phar

PHP5.4:Short Open Tag, 数组简写形式,trait, 内置 Web 服务器,细节修改,移除safemode

PHP5.5:yield, list() 用于 foreach, 细节修改

PHP5.6: 常量增强,可变函数参数,命名空间增强

1. PHP5.2以前。

#__autoload

function __autoload($classname)

{

require_once("{$classname}.php")

}

但该函数已经不被建议使用,原因是一个项目中仅能有一个这样的 __autoload() 函数,因为 PHP 不允许函数重名。取而代之:

spl_autoload_register(function($classname)

{

require_once("{$classname}.php")

});

约束类型:

// 限制第一个参数为 MyClass, 第二个参数为可执行类型,第三个参数为数组

function MyFunction(MyClass $a, callable $b, array $c)

{

// ...

}

2. PHP5.2

json_encode和json_decode

3. PHP5.3

弃用的功能:

register_globals (将post,get自动转化成变量)

if(isAuth())

$authorized = true;

if($authorized)

include("page.php");

如果访问 /auth.php?authorized=1 来定义该变量值,绕过身份验证。

Magic Quotes(自动转义用户输入)

Safe Mode

新增的功能:

匿名函数

function aa($func){

echo $func();

}

aa(function(){

return 'AA';

});

$a = function(){

return 123;

}; //这个分号必须有,要不报错

echo $a();

魔术方法:新增__invoke(), __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

}

Heredoc 和 Nowdoc

$name = "MyName";

echo <<< TEXT

My name is "{$name}".

TEXT;

#result: My name is "MyName".

Nowdoc

$name = "MyName";

echo <<< 'TEXT'

My name is "{$name}".

TEXT;

#result: My name is "{$name}"

Nowdoc 的行为像一个单引号字符串,不能在其中嵌入变量,和 Heredoc 唯一的区别就是,三个左尖括号后的标识符要以单引号括起来。

const 可以用在class外部,像define,但不能进行运算

const E = 123;

class A{

const A = 123;

}

#错误的写法

const E = 123 * 123;

三元运算符简写

#旧的

echo $a ? $a : "No Value";

#新的

echo $a ?: "No Value";

//三元运算符的简写,其中 true的那个位置是给的 问号 前面的值

$a = 'aa';

echo isset($a) ?: 'bbb'; 返回 1

后期静态绑定:

class ATest {

public function say()

{

echo 'Segmentfault';

}

public function callSelf()

{

self::say();

}

public function callStatic()

{

static::say();

}

}

class BTest extends ATest {

public function say()

{

echo 'PHP';

}

}

$b = new BTest();

$b->say(); // output: php

$b->callSelf(); // output: segmentfault

$b->callStatic(); // output: php

4. PHP5.4

Short Open Tag 自 PHP5.4 起总是可用

数组的简写

$arr = array(1, 2, 3);

$arr = [1, 2, 3]

trait是为类似 PHP 的单继承语言而准备的一种代码复用机制。Trait 为了减少单继承语言的限制,使开发人员能够自由地在不同层次结构内独立的类中复用 method

#trait 实现多继承

// trait不能被单独实例化,只能被类所包含

trait SayWorld

{

public function sayHello()

{

echo 'World!';

}

}

class MyHelloWorld

{

// 将SayWorld中的成员包含进来

use SayWorld;

}

$xxoo = new MyHelloWorld();

// sayHello() 函数是来自 SayWorld 构件的

$xxoo->sayHello();

内置web服务器

5. PHP5.5

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

function number10()

{

for($i = 1; $i <= 10; $i += 1)

yield $i;

}

#结果

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

list() 用于 foreach

可以用 list() 在 foreach 中解析嵌套的数组:

$array = [

[1, 2, 3],

[4, 5, 6],

];

foreach ($array as list($a, $b, $c))

echo "{$a} {$b} {$c}\n";

#result:

1 2 3

4 5 6

6. PHP5.6

const支持计算

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

function add(...$args)

{

$result = 0;

foreach($args as $arg)

$result += $arg;

return $result;

}

$arr = [2, 3];

add(1, ...$arr);

#result: 6

命名空间增强。可以在里面定义常量和方法

namespace Name\Space {

const FOO = 42;

function f() { echo __FUNCTION__."\n"; }

}

namespace {

use const Name\Space\FOO;

use function Name\Space\f;

echo FOO."\n";

f();

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值