php7类型约束,严格模式

在PHP7之前,函数和类方法不需要声明变量类型

,任何数据都可以被传递和返回,导致几乎大部分的调用操作都要判断返回的数据类型是否合格。

为了解决这个问题,PHP7引入了类型声明。

目前有两类变量可以声明类型: 形参,返回值。

支持的类型有整形,浮点型,字符串型,布尔型。

简单的代码演示

    public function demo(int $num)

    {
        return $num;
    }

    public function aa()
    {
        return  $this->demo(11);
    }

上面代码的demo方法定义形参的类型为int类型,浏览器访问调用aa方法返回值为11

这时候如果传入字符串类型的参数进去

    public function aa()
    {
        return  $this->demo('你好');
    }

浏览器访问调用aa方法直接报错

而有些情况下,php判断也是不严谨的

    public function demo(int $num)

    {
        return $num;
    }

    public function aa()
    {
        return  $this->demo('11');
    }

这个时候传入进去的参数其实是字符串,但是浏览器访问调用aa方法没有报错,返回值为11,所以这样就不算严谨了

在php7后面的版本中引入了开启严格模式去解决上面的问题

关键字declare

如要强制性约束类型,可在文件头部添加declare声明:

 开启了严格模式之后

这时候在测试一下上面的案例,发现编辑器语法上面就已经报错了,浏览器运行一下果然报错:

只有严格定义传入的参数是int类型才可以

如果不做类型强制约束,那么PHP会将返回的数据转化为指定类型的数据再返回,目前差不多只有string无法强转为int才会报错。

如果指定了强制约束,那么PHP将不会进行类型转换,而是进行对比,如类型不同,则报错。

返回类型声明

第一次看到这种写法觉得很陌生,也是php7后面引进的写法

<?php

declare(strict_types=1);
//php7中引入的内容 strict_types=1 针对参数类型开启严格模式,进行数据类型检验,默认是弱类型校验
// 哪个文件写了declare,哪个文件中的所有代码就需要检查

namespace app\admin\controller;

class Index
{

    public function demo(string $num): string

    {
        return $num;
    }

    public function aa()
    {
        return  $this->demo('测试内容');
    }
}

demo方法形参的括号后面加冒号加类型即可指定方法返回值的类型,指定了什么类型返回的就是什么类型,上面demo方法的形参定义为string类型,返回值的类型也定义为string类型

稍微改变一下

<?php

declare(strict_types=1);
//php7中引入的内容 strict_types=1 针对参数类型开启严格模式,进行数据类型检验,默认是弱类型校验
// 哪个文件写了declare,哪个文件中的所有代码就需要检查

namespace app\admin\controller;

class Index
{

    public function demo(int $num): int

    {
        return $num + 10.5;
    }

    public function aa()
    {
        return  $this->demo(11);
    }
}

这时候开启严格模式,规定demo方法返回值的类型为int类型,浏览器运行一下就报错了

因为返回的值类型是float浮点类型,而不是定义的int类型

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值