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声明:

php7类型约束,严格模式_第1张图片

 开启了严格模式之后

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

php7类型约束,严格模式_第2张图片

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

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

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

返回类型声明

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

demo('测试内容');
    }
}

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

稍微改变一下

demo(11);
    }
}

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

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

php7类型约束,严格模式_第3张图片

 

你可能感兴趣的:(php,php,开发语言)