Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHP严格模式下键入混合参数?_Php_Oop - Fatal编程技术网

如何在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

我正在一个自定义类中注入一个类

该方法具有伪类型

没有严格的打字

由于PHP不允许重载,您如何使用它

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