0
class User{
    
    interface User {
      name: string
      age: number
    }
    
    public function create(User data){}
}

如果在php中可以使用类似的语法去校验参数类型吗?

Loveyou 26
2019-04-03 提问
4 个回答
1

已采纳

结论

首先说结论:可以

首先

PHP 也有接口(interface)这个东西,但是 PHP 的接口不能声明类成员 所以在这里就不太适用了。

转而言之

PHP 5 支持抽象类和抽象方法。定义为抽象的类不能被实例化 虽然抽象可以设置类成员,但是不能被实例化。

其实

直接使用 来实现即可,当然类成员设置成 private 然后创建成员对应的 setter 对其进行赋值校验即可,如果不嫌麻烦,也可以再创建 getter ,当然,更简单的办法就是重写 __get 魔术方法来实现 getter,至于使用方法,没什么差别。
详见 类型约束

拓展

PHP 5 可以使用类型约束。
函数的参数可以指定必须为对象(在函数原型里面指定类的名字),接口,数组(PHP 5.1 起)或者 callable(PHP 5.4 起)。不过如果使用 NULL 作为参数的默认值,那么在调用函数的时候依然可以使用 NULL 作为实参。

1

除了楼上说的gettype
还可以通过is_int,is_bool,is_object,is_array,is_null ,is_string
等判断变量类型

0

PHP是弱类型的语言,不支持类型自动校验,但可能通过gettype检查

<?php
$data = array(1, 1., NULL, new stdClass, 'foo');

foreach ($data as $value) {
echo gettype($value), "\n";
}

输出

integer
double
NULL
object
string
0

这都9102年了能不能去翻翻手册看看类型约束的部分……
同时要注意开启严格模式,这样PHP就会变成静态类型了

撰写答案

推广链接