首页
学习
活动
专区
圈层
工具
发布

PHP8版本后新语法,颠覆认知

PHP8.0新版本发布了两大新特性,今天分别多两种类型展开讨论。

1、联合返回类型声明,允许返回多个可能返回的类型。

<?php

class Stu {

  // 参数为联合类型

  public function add (int | float $a,int | float $b): int {

      return $a+$b;

  }

  // 参数和返回都为联合类型

  public function sub (int | float $a,int | float $b): float|int {

      return $a+$b;

  }

  // 参数为不同的联合类型

  public function mul (int | float $a,int | string $b):string {

      return $a+$b;

  }

}

$stu = new Stu();

$rest=$stu->add(10,20);

var_dump($rest);

// int(30)

$rest=$stu->add(10.3,'20');

var_dump($rest);

// int(30) 从float 30.3到int的隐式转换失去了精度

$rest=$stu->sub(30.25,20);

var_dump($rest);

// float(50.25)

$rest=$stu->mul(30.25,20);

var_dump($rest);

// string(5) "50.25"

2、命名参数调用,支持在调用时通过参数名而非位置传递参数。

<?php

class Stu{

  // 参数和返回值都有数据类型

  public function add (int $a,int $b): int {

      return $a + $b;

  }

  // 带...的多参数

  public function sub (int | float $a,int | float $b, ...$c): float|int {

      $rest = $a - $b;

      if($c) {

          foreach($c as $value) {

              if(is_array($value)) {

                  foreach($value as $val) {

                      $rest -= $val;

                  }

              }

          }

       }

      return $rest;

  }

}

$stu = new Stu();

// 正常调用

$rest = $stu->add(100,100);

var_dump($rest);

// int(200)

// 按参数名调用,如果使用用参数名,后面需要用参数时必须要指定,比如第一个参数用b参数名称,第二册参数必须指定a参数,不然报错

$rest = $stu->add(b:120,a:100);

var_dump($rest);

// int(220)

// 不传c参数 表示为空数组

$rest = $stu->sub(10.3,10);//  Array ( )

var_dump($rest);

// float(0.3000000000000007)

// 传1个c参数 表示为一个数组

$rest = $stu->sub(10.3,10,[10,20]); // Array ( [0] => Array ( [0] => 10 [1] => 20 ) )

var_dump($rest);

// float(-29.7)

// 传2个c参数 表示为两个数组  以此类推

$rest = $stu->sub(10.3,10,[10,20],[10,20,30]);// Array ( [0] => Array ( [0] => 10 [1] => 20 ) [1] => Array ( [0] => 10 [1] => 20 [2] => 30 ) )

var_dump($rest);

// float(-89.7)

通过以上新功能的测试后,发现语法与python的语法类似,一方面可以专递多个参数,另一方面可以按指定参数传递参数。php的语法真是混合语法,你有的我有,你没有的我也有。

看完本文有收获?点赞、分享是最大的支持!

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OZZTyNFkDjm1QBwmnZ3J0ScA0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。
领券