php7类,PHP7 版本各大类型特性

php5.6 升级 php7.0 支持的特性

标量类型声明

标量类型声明 有两种模式: 强制 (默认) 和 严格模式。

function sumOfInts(int ...$ints){ return array_sum($ints);}var_dump(sumOfInts(2, '3', 4.1));

76ae6516eaf9f12372c74d15b925bcc9.png

php5.6不支持的。

强制类型支持如下类型

Class/interface name 该参数必须是instanceof给定的类或接口名称。 PHP 5.0.0self 参数必须instanceof与定义方法的类别相同。这只能用于类和实例方法。 PHP 5.0.0+array 参数必须是一个数组。 PHP 5.1.0+callable 该参数必须是有效的callable。 PHP 5.4.0+bool 该参数必须是布尔值。 PHP 7.0.0+float 该参数必须是浮点数。 PHP 7.0.0+int 参数必须是整数。PHP 7.0.0+string 参数必须是字符串。PHP 7.0.0+iterable 参数必须是数组或Traversable。 instanceof, PHP 7.1.0+object ,参数必须是一个对象。PHP 7.2.0+例子

class C {}class D extends C {}// This doesn't extend C.class E {}function f(C $c) { echo get_class($c)."\n";}f(new C);f(new D);f(new E);

30cec1124aa6944691c3a2ba866b8fbb.png

严格输入例子

declare(strict_types=1);function sum(int $a, int $b) { return $a + $b;}var_dump(sum(1, 2));var_dump(sum(1.5, 2.5));

383ec52862e48ead952ef449010d2871.png

弱格式输入

function sum(int $a, int $b) { return $a + $b;}var_dump(sum(1, 2));var_dump(sum(1.5, 2.5));

b54dfc1c2e3527f2a3f12e7e5fdda98f.png

捕获TypeError

declare(strict_types=1);function sum(int $a, int $b) { return $a + $b;}try { var_dump(sum(1, 2)); var_dump(sum(1.5, 2.5));} catch (TypeError $e) { echo 'Error:'.$e->getMessage();}null合并运算符

如果变量存在且值不为NULL, 它就会返回自身的值,否则返回它的第二个操作数.

$username = $_GET['user'] ?? 'nobody';echo $username;

27ef011fe72f3bfd84d454785de1df7d.png

通过 define() 定义常量数组

e1365c3bcda17ff36864d995c1eff6e4.png

匿名类 new class

现在支持通过new class 来实例化一个匿名类,这可以用来替代一些“用后即焚”的完整类定义。

<?phpinterface Logger { public function log(string $msg);}class Application { private $logger; public function getLogger(): Logger { return $this->logger; } public function setLogger(Logger $logger) { $this->logger = $logger; }}$app = new Application;$app->setLogger(new class implements Logger { public function log(string $msg) { echo $msg; }});var_dump($app->getLogger());?>

28abfda23598c8a735bbf2b20f75ecee.png

从同一 namespace 导入的类、函数和常量现在可以通过单个 use 语句 一次性导入了

// PHP 7 之前的代码use some\namespace\ClassA;use some\namespace\ClassB;use some\namespace\ClassC as C;use function some\namespace\fn_a;use function some\namespace\fn_b;use function some\namespace\fn_c;use const some\namespace\ConstA;use const some\namespace\ConstB;use const some\namespace\ConstC;// PHP 7+ 及更高版本的代码use some\namespace\{ClassA, ClassB, ClassC as C};use function some\namespace\{fn_a, fn_b, fn_c};use const some\namespace\{ConstA, ConstB, ConstC};有点类似 js 的引入模块写法。

intdiv() 整数除法函数

<?phpvar_dump (intdiv(10, 3));//int(3)?>random_bytes 生成加密安全的伪随机字节

random_bytes ( int $length ) : string

$bytes = random_bytes(16);echo (bin2hex($bytes));

657960a808f207c4ca718672ddff9a80.png

random_int() 生成加密安全的伪随机整数

var_dump(random_int(100, 999));var_dump(random_int(-1000, 0));

4ae63ef51924c2089e3d0c953f5671c7.png

PHP7.0 升级到php7.1特性

可为空(Nullable)类型

function swap(&$left, &$right) : void{ if ($left === $right) { return; } $tmp = $left; $left = $right; $right = $tmp;}$a=10;$b=20;var_dump(swap($a,$b)) ;

3ca8be19130ddeb01e5bcda9dd33e7c5.png

短数组语法([])现在作为list()语法的一个备选项,可以用于将数组的值赋给一些变量

$data = [ [1, 'Tom'], [2, 'Fred'],];// list() styleecho 'list($id1, $name1) = $data[0];
';list($id1, $name1) = $data[0];echo $id1,'-----',$name1,'
';// [] style[$id1, $name1] = $data[0];echo '[$id1, $name1] = $data[0];
';echo $id1,'-----',$name1,'
';

758920ebb1ab43c6e94f3d830401e6ef.png

类常量可见性

一个catch语句块现在可以通过管道字符 (|) 来实现多个异常的捕获。 这对于需要同时处理来自不同类的不同异常时很有用

<?php $data = [ ["id" => 1, "name" => 'Tom'], ["id" => 2, "name" => 'Fred'],];// list() stylelist("id" => $id1, "name" => $name1) = $data[0];// [] style["id" => $id1, "name" => $name1] = $data[0];支持为负的字符串偏移量

var_dump("abcdef"[-2]); //string (1) "e"openssl_encrypt /openssl_decrypt 支持 AEAD异步信号处理

一个新的名为 pcntl_async_signals() 的方法现在被引入, 用于启用无需 ticks (这会带来很多额外的开销)的异步信号处理

PHP7.1 升级到php7.2

新的对象类型

扩展文件不再需要通过文件加载 (Unix下以.so为文件扩展名,在Windows下以 .dll 为文件扩展名) 进行指定。可以在php.ini配置文件进行启用, 也可以使用 dl() 函数进行启用。

允许重写抽象方法(Abstract method)

array_key_first — 获取指定数组的第一个键值array_key_last() 获取一个数组的最后一个键值

变化不大,新增内容比较多

PHP 7.3 升级到 PHP 7.4

属性添加限定类型

<?phpclass User { public int $id; public string $name;}?>箭头函数

骚操作,跟JS差不多了

<?php $factor = 10;$nums = array_map(fn($n) => $n * $factor, [1, 2, 3, 4]);// $nums = array(10, 20, 30, 40);?>数组展开操作

<?php $parts = ['apple', 'pear'];$fruits = ['banana', 'orange', ...$parts, 'watermelon'];// ['banana', 'orange', 'apple', 'pear', 'watermelon'];?>PHP 7.4.x 废弃

没有显式括号的嵌套三元运算符echo 1 ? 2 : 3 ? 4 : 5; // deprecated 4echo '
';echo (1 ? 2 : 3) ? 4 : 5; // ok 4echo '
';echo 1 ? 2 : (3 ? 4 : 5); // ok 2echo '
';

0f0046a411df606c40d21daed925f542.png

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值