Как вы вводите смешанный параметр в строгом режиме PHP? - PullRequest
1 голос
/ 08 ноября 2019

Я внедряю класс Memcached в пользовательский класс.

В методе Memcached :: set () есть "mixed" псевдотип.

PSR-6: интерфейс кэширования не является строго типизированным.

Как это сделать с строгого типа как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, который решит это ( wiki.php.net / rfc / union_types_v2 ):

"[...] Мы не добавляем смешанный тип из-за страха, что он будет использоваться в тех случаях, когда можно было бы указать более конкретное объединение. После объединения типовподдерживаются, возможно, имеет смысл добавить смешанный тип [...] "

1 Ответ

1 голос
/ 08 ноября 2019

Нет другого способа объявить параметр «смешанного типа» (например, принять значение любого типа, будь то скаляр, ссылка, экземпляр класса или даже ноль), кроме как , пропуская подсказка типа.

Это говорит о том, что вы ожидаете string для $key, int для $expiration;и любое значение для $value (например, «смешанный»).

public function set(string $key, $value, int $expiration): bool

declare(strict_type=1) не имеет к этому никакого отношения. Это объявление влияет только на объявления скалярных типов там, где они существуют. Если нет объявления типа, типом является mixed, и не может быть никакого типа «приведения типов», что делает strict_types спорным.

Обратите внимание, что предложение существовало дляпредставьте это объявление псевдотипа , но оно так и не прошло стадию черновика, поскольку не получило особенно теплого приема в группе внутренних компонентов PHP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...