键入提示和多个构造函数

Opt*_*ime 8 php php-7

我一直在研究PHP7的新功能,并认为我可能会开始准备我的项目,因为它引入了新功能,如标量类型提示.

我遇到的第一个问题之一是我的各种类的构造函数.我有一些通用的控制器,其行为如下:

public function __construct($data = null) {
    if (is_numeric($data)) {
        $this->controller->createById($data);
    }
    elseif (is_array($data)) {
        $this->controller->createByArray($data);
    }
    elseif (strlen($data) > 0) {
        $this->controller->createByUrl($data);
    }
}
Run Code Online (Sandbox Code Playgroud)

引入此方法的类型提示当然会在所有方向上引发错误.

据我所知,PHP7不会引入对多个构造函数的支持.有没有办法解决这个问题,还是这种语言的限制之一?

bwo*_*ebi 6

正确,这是该语言的局限之一.(并且strlen() > 0无论如何都无法通过类型进行检查.这会自动转换为字符串...所以你的方法只允许"",null和false?)

一般来说,草案中有RFC来扩展PHP中的PHP类型:https://wiki.php.net/rfc/union_types

那会让你写int | float | array | string $data = null.