PHP 未来的版本会支持联合类型声明么?

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

try {
    // some code
} catch (FirstException | SecondException $e) {
    // handle first and second exceptions
}

又知 TypeScript 支持联合类型,可以通过管道(|)将变量设置多种类型,赋值时可以根据设置的类型来赋值。

var val: string|number;
val = 12;
console.log("数字为 " + val);
val = "Runoob";
console.log("字符串为 " + val);

最近在写一个去 MongoDB 数据库增删改查数据的功能, MongoDB 对查询条件的数据类型是有严格限制的,如某字段记录的数据为整型32,若使用字符串’32’查询,则查询不到该记录。
有些字段只会是整型、字符串及 null 等等(总之不会是数组或对象),故一些方法要限制传入类型只能上述类型。
但目前的 PHP 版本,若声明参数类型为整型,则传入字符串参数,会被自动转换为整型,反之亦然。故无法给参数声明类型,还要写传入非预期类型抛出异常的代码。
不知未来 PHP 会否支持函数、对象属性、方法的参数联合类型声明及返回值联合类型声明,乃至数组元素的联合类型声明。

Long2Ge
讨论数量: 2
long2ge

不过也有一个问题:实现联合类型声明后,假如我参数类型定义为 int|string ,且参数传入 false ,将会转换为0还是空字符串(PHP 默认 strict_types=0 )?如果在 typescript 这么做,会报参数类型错误。

3年前 评论

不可能吧,已经向严格模式方向走了

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!