【发布时间】:2018-06-15 14:04:06
【问题描述】:
根据 PHP 文档中的 Strict Typing 找到 here
默认情况下,如果可能,PHP 会将错误类型的值强制转换为预期的标量类型。例如,为期望字符串的参数提供整数的函数将获得字符串类型的变量。
我很好奇是否有办法覆盖此功能以自定义强制完成的方式。
例如
function getResponse() : \Namespace\Response {
return []; // Ideally, this would be coerced into a Response object.
}
. . .
namespace Namespace;
class Response {
public $data;
public function __construct(array $arr)
{
$this->data = $arr;
}
public static function __coerce($value)
{
if (! is_array($value)) {
throw new \TypeError('Wrong type during coercion.');
}
return new self($value);
}
}
【问题讨论】:
-
我不太了解“自定义”强制转换的概念。严格输入是
on或off。而且,如果您曾经超过文档中的第一句话,您就会看到,严格输入将在每个文件的基础上打开:declare(strict_types=1); -
顺便说一句。如果你想要严格的返回类型,你应该使用 Java。
-
@AlexKarshin 我正在尝试覆盖强制的功能。我知道可以打开或关闭严格输入。我希望能够键入提示函数的返回类型,并返回不是该类型提示类型的类型,并且这样做时,我可以覆盖类型提示类型中的函数来处理外部类型改成那个类型。
-
唯一的解决方案是下载源代码并按照您想要的方式对其进行编辑,然后编译并使用。 AFAIK,没有其他办法。
-
我的建议是在你的代码中完全不要依赖强制 - 最后 PHP 有严格的类型!拥抱它=)
标签: php php-7 type-coercion