好段时间没写了,然后突然不知道写啥,刚刚想着貌似php7有个新的特征 数据类型约束 ,那么一起来折腾折腾

认识数据类型约束

众所周知,在php中是对类型不约束,自动判定转换,不过嘛,在php7开始,出现了 数据类型约束

function myTestFun (int $num) {
    return $num;
}
myTestFun("Mystr");

此时,我们在声明参数时,限定了为 int 类型,后面调用却是传入一个字符串,这时就会报 Fatal error 错误,因为我们传入的不是 int 类型

function myTestFun (bool $bo) {
    return $bo;
}
var_dump( myTestFun("Mystr") ); // bool(true)

这时,我们定义一个传入需要 bool 类型的参数,但是我们代码执行却不会报错,输出true,为什么呢?原因嘛,字符串被自动转换成为了 true ,所以不会报错,但是,那么如何才能不让他自动转换呢,很简单,那就是通过声明 declare 开启严格模式

declare(strict_types = 1);
function myTestFun (bool $bo) {
    return $bo;
}
var_dump( myTestFun("Mystr") ); 

这样的话,后边传入字符串,由于声明了严格类型约束,这里字符串将不再自动转换,所以这里会抱一个致命错误(Fatal error),必须得传入 truefalse 才行,哪怕是 10 都不行

刚刚说了传入参数类型约束,那么,返回值呢?能不能也约束呢?答案嘛,那是当然,还是上面的代码

declare(strict_types = 1);
function myTestFun (bool $bo) : int {
    return (int)$bo;
}
var_dump( myTestFun(false) ); 

上面,我们通过在函数声明的括号后面使用 : 类型 来约束返回值类型,同样,受限于 declare ,返回值不会自动转换类型,如果返回类型和声明的返回类型不相符合,那么就会直接给一个致命错误,所以,声明声明返回类型就得返回什么类型

当然,返回类型也可以是对象,如下

class MyTest {
    private string $name;
    public function __construct(string $name){
        $this->name = $name;
    }
    public static function NewTest(string $name) : MyTest {
        return new MyTest($name);
    }
}
Last modification:June 3rd, 2020 at 01:22 am
如果觉得我的文章对你有用,请随意赞赏