首页 > 未分类 > php基础-php7和php5的异同点
2022
10-14

php基础-php7和php5的异同点

bigsmoker 51future 技术宅

 

大家好,今天要给大家分享的是任何一门语言都要学习的东东语法(大牛请忽略这篇文章)。那么php的语法是什么样的呢?为了给大家讲解以及自己巩固。我将php5与最新的php7的语法做了些整理。同时这里再推荐看下 php基础-设计模式,及 php 一步步实现mvc架构——路由篇

一 关于变量

php5和7并无区别

变量以非特殊字符,数字开头

错误的命名方式:$^&%name,$123name

正确的命名方式:$name123,$_Name123

 

二 关于include,require

大家都知道,在php5中include在碰到 程序上的错误的话,会发出警告,并继续执行。而require会终止程序继续执行。那么在php7中是如何处理的呢?

先看一个include 的例子

=====================

b.php

<?php

if(1==2)

{

continue;

}

?>
=====================

a.php

<?php

include("b.php");//b.php先执行

echo "hello"

?>

php5

结果: 输出 "hello"

 

php7

结果: 输出 PHP Fatal error: Cannot break/continue 1 level in b.php on line….

 

注意:

在脚本中那个continue,php5处理时会判断1==2是true还是false,如果是false,则直接绕过,php7中,不管1==2是否成立,它会预先判断continue是否符合语法规则。

结论:对于include,reuqire php5 不会预判不符合语法规则,只有执行到了才会返回错误,而php7会预判语法规则

 

三 关于数组

php7中define 一个常量数组

<?php

define("a",[12,23,33]);

var_dump(a);

 

php5

结果:输出

Use of undefined constant a – assumed 'a' in /var/www/html/array.php on line 3 string(1) "a"

 

php7

结果:输出

array(3) {

[0]=>

int(12)

[1]=>

int(23)

[2]=>

int(33)

}

结论: define 在php5中不可定义为数组在php7中可定义为数组

 

php7中的变量运行方式与php5有所区别

 

<?php

class Test {

function a()

{

print_r("hello");

}

}

 

$obj = new Test();

$arr = ["a"];

$obj->$arr[0]();

php5

结果 输出:

hello

php7

结果输出:

PHP Fatal error: Uncaught Error: Function name must be a string in /var/www/html/array.php:13

注意:

php7 要 运行的话需要将 $obj->$arr[0]() 改成这样 $obj->{$arr[0]}()。

如此一来php5 和php7都能运行这段代码。

结论:

php7代码运行的结合方式与php5中不同,要运行的话需要用{}显示的处理变量结合顺序

 

四 关于类型
php本来就是弱类型语言,在php7之前除了class以外是 没有这个要求的,那么在php7以前要在函数或方法声明变量类型该如何做呢?我先举个多态的例子

例子

<?php

interface Human {

function getSex();

}

class Woman implements Human{

function __construct()

{

 

}

function getSex()

{

return "I am woman";

}

}

class Man implements Human {

function __construct()

{

 

}

function getSex()

{

return "I am man";

}

}

class Call {

function catlog(Human $p)

{

return $p->getSex();

}

}

$obj = new Call();

var_dump($obj->catlog(new Woman()));

var_dump($obj->catlog(new Man()));

php5和php7输出结果一样:

string(10) "I am woman"

string(8) "I am man"

注意:

Man 和Woman 都实现了Human接口,所以它们都是Human类型,即多态。Human $p 这个$p就是Human类型

在php7中可以给变量及返回值声明类型

标量类型声明

<?php

function test(int $a)

{

return $a;

}

var_dump(test(1));

php5 输出结果:

PHP Catchable fatal error: Argument 1 passed to test() must be an instance of int, integer given, called in /var/www/html/type.php on line 7 and defined in /var/www/html/type.php on line 2

php7输出结果:

int(1)

注意: test(int $a) 这个$a 之前的int 就是类型声明

结论:

php7支持 标量类型声明,php7以下不支持

返回值类型声明

<?php

function test(int $a): array

{

return [$a];

}

 

var_dump(test(1));

php7输出:array(1) {[0]=>int(1)}

注意:函数返回的结果类型要与声明的类型一致 否则将报错 。例如将return [$a] 改成 return $a,将报错

PHP Fatal error: Uncaught TypeError: Return value of test() must be of the type array, integer returned in ….

 

关于太空符号

 

<?php

var_dump("a"<=>"a","a"<=> "b","b"<=> "a")

php5 结果 输出:

PHP Parse error: syntax error, unexpected '>' in

php7 结果 输出:

int(0)

int(-1)

int(1)

注意:php7以前不支持太空符操作,

结论:左边比右边小 则输出 -1,比右边大 就输出1 相等就输出0

关于php7 和PHP5的特性今天就先总结到这。下一篇讲php的设计模式,欢迎大家继续关注,谢谢

来源:https://zhuanlan.zhihu.com/p/349220668


留下一个回复