如何在PHP严格模式下键入混合参数?
我正在一个自定义类中注入一个类 该方法具有伪类型 没有严格的打字 由于PHP不允许重载,您如何使用它如何在PHP严格模式下键入混合参数?,php,oop,Php,Oop,我正在一个自定义类中注入一个类 该方法具有伪类型 没有严格的打字 由于PHP不允许重载,您如何使用它 Class Cache { private Memcached $cache; [...] public function __construct(Memcached $cache) { [...] } public function set(string $key, ???? $value, int $expiration): bool { return $t
Class Cache
{
private Memcached $cache;
[...]
public function __construct(Memcached $cache) { [...] }
public function set(string $key, ???? $value, int $expiration): bool
{
return $this->cache($key, $value, $expiration);
}
}
PS:今天,php团队已经接受了php8的联合类型,它将解决这个问题():
“[…]我们推迟添加混合类型,因为担心它会
在可能出现更具体的联合的情况下使用
指定。一旦支持联合类型,它可能也会
选择添加混合类型[…]”
除了通过忽略类型提示之外,没有其他方法可以声明参数为“混合类型”(例如,接受任何类型的值,可以是标量、引用、类实例,甚至null) 这表示您希望
$key
使用字符串
,$expiration
使用int
;以及$value
的任何值(例如“混合”)
declare(strict\u type=1)
与此无关。该声明只对存在标量类型声明的地方有效。如果没有类型声明,则类型是混合的
,并且不能有任何类型的“类型强制”,这使得严格的类型
没有意义
请注意,这是一个错误,但它从未经过草稿阶段,因为在PHP内部组中 Mixed不是严格类型,因此我不明白键入它的意义,或者我遗漏了一些东西。我指的是代码中的问号。好的,根据定义,Mixed类型不是严格类型,您不能在那里键入。您只需将类型留空=混合。这是否回答了您的问题?正如@Jimmix所指出的,您不能使用混合类型。无论是否启用了
strict\u type
,您都必须让参数不带任何类型提示。希望他们在未来的php版本中引入strict\u type=1的方法重载。
public function set(string $key, $value, int $expiration): bool