类型提示和多个构造函数
Type hinting and multiple constructors
我一直在研究 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);
}
}
为此方法引入类型提示当然会全方位抛出错误。
据我所知PHP7没有引入对多个构造函数的支持。有没有办法解决这个问题,或者这是语言的局限性之一?
正确,这是该语言的局限性之一。
(而且 strlen() > 0
无论如何都无法通过类型进行检查。它会自动转换为字符串……因此您的方法允许除“”、null 和 false 之外的所有内容?)
一般情况下,草案中有 RFC 来扩展 7.1 中 PHP 的类型提示:
https://wiki.php.net/rfc/union_types
这样你就可以写 int | float | array | string $data = null
。
我一直在研究 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);
}
}
为此方法引入类型提示当然会全方位抛出错误。
据我所知PHP7没有引入对多个构造函数的支持。有没有办法解决这个问题,或者这是语言的局限性之一?
正确,这是该语言的局限性之一。
(而且 strlen() > 0
无论如何都无法通过类型进行检查。它会自动转换为字符串……因此您的方法允许除“”、null 和 false 之外的所有内容?)
一般情况下,草案中有 RFC 来扩展 7.1 中 PHP 的类型提示: https://wiki.php.net/rfc/union_types
这样你就可以写 int | float | array | string $data = null
。