Я хочу определить функцию PHP 7, которая принимает параметр смешанного типа. (То, что я хочу, является эквивалентом параметра общего типа в С#, если есть лучший способ подражать этому в PHP 7, пожалуйста, дайте мне знать.)
Мой код выглядит следующим образом.
<?php
declare (strict_types = 1);
function test (mixed $s) : mixed {
return $s;
}
// Works
echo gettype ('hello');
// Does not work
echo test ('hello');
?>
Когда я запускаю этот код, я получаю следующее.
Fatal error: Uncaught TypeError: Argument 1 passed to test() must be an instance of mixed, string given, called in mixed.php on line 11 and defined in mixed.php:4
Stack trace:
#0 mixed.php(11): test('hello')
#1 {main}
thrown in mixed.php on line 4
Если я прокомментирую вызов test(), код работает нормально, поэтому, по-видимому, мне, по крайней мере, подходит для использования смешанного типа параметра в объявлении функции.
Я знаю, что встроенные функции PHP, такие как gettype(), могут принимать смешанные параметры, хотя я не знаю, внутренне ли они используют строгую типизацию.
Я вижу, что "mixed" также используется как псевдо-тип в PHP документации, поэтому я мог бы неправильно понять цель "смешанного", как ключевое слово PHP, но то, что я вижу здесь, по крайней мере, подразумевает, что это законное ключевое слово. Я просто использую его так, как он не предназначен?
Наконец, я понимаю, что могу обойти все это, просто не указывая тип параметра, но я хотел бы быть последовательным, указав все мои параметры и типы возвращаемых данных.
Спасибо, и, пожалуйста, дайте мне знать, если я могу предоставить дополнительную информацию.