当前位置 : 主页 > 网络编程 > PHP >

【黄啊码】用PHP7性能居然是5.6的三倍?赶紧看看它有什么新特性

来源:互联网 收集:自由互联 发布时间:2023-09-03
大家好,我是黄啊码,最近说到php从入门到拆门,有网友说,门都还没进,怎么拆门?那咱们现在就从php7说起,至于入门的太简单,我就略过了,大家加油,不懂Q我吧。 据网友测评,


大家好,我是黄啊码,最近说到php从入门到拆门,有网友说,门都还没进,怎么拆门?那咱们现在就从php7说起,至于入门的太简单,我就略过了,大家加油,不懂Q我吧。

据网友测评,PHP 7+ 版本极大地改进了性能,在一些WordPress基准测试当中,性能可以达到PHP 5.6的3倍。

【黄啊码】用PHP7性能居然是5.6的三倍?赶紧看看它有什么新特性_PHP

 PHP 7+ 版本新加特性如下表所示:

目录

​​PHP 标量类型与返回值类型声明​​

​​那什么是强制类型,什么又是严格类型?​​

​​那什么是严格类型?​​

​​void 函数​​


PHP 标量类型与返回值类型声明

默认情况下,所有的PHP文件都处于弱类型校验模式。

PHP 7 增加了标量类型声明的特性,标量类型声明有两种模式:

  • 强制模式 (默认)
  • 严格模式

标量类型声明语法格式:

declare(strict_types=1);

代码中通过指定 strict_types的值(1或者0),1表示严格类型校验模式,作用于函数调用和返回语句;0表示弱类型校验模式。

可以使用的类型参数有:

  • int
  • float
  • bool
  • string
  • interfaces
  • array
  • callable

那什么是强制类型,什么又是严格类型?

比如:

<?php
// 强制模式
function sum(int ...$ints)
{
return array_sum($ints);
}

print(sum(3, '3', 9.1));
?>

简单来说就是比如:你在做数字计算时,这里的字符串3会自动帮你强制转换成数字3,然后再次计算 ,又因为我们声明了这是整数类型,所以9.1会自动转换成9

【黄啊码】用PHP7性能居然是5.6的三倍?赶紧看看它有什么新特性_php_02

那什么是严格类型?

黄啊码:我也不怎么说,就是不听话就报错吧,叫你传数字,你传字符串我就给你报个错,让你知道什么叫做对。

哈哈哈,比如:

<?php
// 严格模式
declare(strict_types=1);

function sum(int ...$ints)
{
return array_sum($ints);
}

print(sum(3, '3', 9.1));
?>

假如我们把这句代码declare(strict_types=1);去掉,那运行毫无问题,但是,加上了就给你安了道门,过不了我这关,就别想继续走了,看这报错。。是不是贼难受?

Fatal error: Uncaught TypeError: Return value of returnIntValue() must be of the type integer, float returned.

【黄啊码】用PHP7性能居然是5.6的三倍?赶紧看看它有什么新特性_php_03

void 函数

一个新的返回值类型void被引入。 这玩意看上去是不是特别熟悉,学习过java或者.net的应该特别清楚吧,就是我啥都不用返回,而在php7中返回值声明为 void 类型的方法要么干脆省去 return 语句,要么使用一个空的 return 语句。 对于 void 函数来说,NULL 不是一个合法的返回值。

返回的类型还有 void,定义返回类型为 void 的函数不能有返回值,即使返回 null 也不行。

void 函数可以省去 return 语句,或者使用一个空的 return 语句。

<?php
function swap(&$left, &$right) : void
{
if ($left === $right) {
return;
}

$tmp = $left;
$left = $right;
$right = $tmp;
}

$a = 1;
$b = 2;
var_dump(swap($a, $b), $a, $b);

结果

【黄啊码】用PHP7性能居然是5.6的三倍?赶紧看看它有什么新特性_PHP_04

是不是特别的哇塞?? 

PHP NULL 合并运算符

PHP 7 新增加的 NULL 合并运算符(??)是用于执行isset()检测的三元运算的快捷方式。

NULL 合并运算符会判断变量是否存在且值不为NULL,如果是,它就会返回自身的值,否则返回它的第二个操作数。

以前我们这样写三元运算符:

$site = isset($_GET['site']) ? $_GET['site'] : '黄啊码';

现在我们可以直接这样写:

$site = $_GET['site'] ?? '黄啊码';

PHP 太空船运算符(组合比较符)

php7还新出了一个运算符<=>,我把它当成上天符,因为官方叫它做太空船运算符,用于比较两个表达式 $a 和 $b,如果 $a 小于、等于或大于 $b时,它分别返回-1、0或1。

实例

<?php
// 整型比较
print( 1 <=> 1);
print( 1 <=> 2);
print( 2 <=> 1);

// 浮点型比较
print( 1.5 <=> 1.5);
print( 1.5 <=> 2.5);
print( 2.5 <=> 1.5);

// 字符串比较
print( "a" <=> "a");
print( "a" <=> "b");
print( "b" <=> "a");

结果输出都是 0   -1   1 

个人来讲,太空船符号比较鸡肋,毕竟大小我们有比较符号

PHP 常量数组

这个小知识点就不必多讲了,类似与变量数组,只不过php5.6用的是const进行声明

<?php
// 使用 define 函数来定义数组
define('sites', [
'Google',
'黄啊码',
'Taobao'
]);

print(sites[1]);
?>
输出:黄啊码

PHP 匿名类 

PHP 7 支持通过 new class 来实例化一个匿名类,这可以用来替代一些"用后即焚"的完整类定义。匿名类可以直接定义给变量,可以在方法中使用return返回,也可以当做参数传递给方法内部。其实,匿名类就像一个没有事先定义的类,而在定义的时候直接就进行了实例化。

这里啊码一次性给了三个例子,你们自己尝尝鲜:

class A {     
public $propA = 'A';
public function getProp(){
echo $this->propA;
}
}
trait B {
public function getName(){
echo 'trait B';
}
}
interface C {
public function show();
}
$p4 = 'b4';
$objC = new class($p4) extends A implements C {
use B;
private $prop1 = 'b1';
protected $prop2 = 'b2';
public $prop3 = 'b3';
public function __construct($prop4){
echo $prop4;
}
public function getProp(){
parent::getProp();
echo $this->prop1, '===', $this->prop2, '===',$this->prop3,'===', $this->propA;
$this->getName();
$this->show();
}
public function show(){
echo 'show';
}
};
$objC->getProp();

PHP Closure::call()

PHP 7 的 Closure::call() 有着更好的性能,将一个闭包函数动态绑定到一个新的对象实例并调用执行该函数。

<?php
class A {
private $x = 1;
}

// PHP 7 之前版本定义闭包函数代码
$getXCB = function() {
return $this->x;
};

// 闭包函数绑定到类 A 上
$getX = $getXCB->bindTo(new A, 'A');

echo $getX();
print(PHP_EOL);

// PHP 7+ 代码
$getX = function() {
return $this->x;
};
echo $getX->call(new A);
?>

输出结果分别为:1    1 

有网友说,php都到8了,为什么你还跟我说php7,我想问,php都到8了,为什么你写代码还用5呢?所以不是新的不好,而是老的稳定,毕竟姜还是老的辣。

好了,今天的分享就这里,有问题的留个言,别忘了一键三连,下次我们还会再见!

我是黄啊码,码字的码,退。。。退。。。退。。。朝! 


【感谢龙石为本站提供数据共享交换平台 http://www.longshidata.com/pages/exchange.html】
上一篇:Google 价格加密 DoubleClick 算法之 PHP 版本
下一篇:没有了
网友评论