Я хочу определить функцию PHP 7, которая принимает параметр смешанного типа. (То, что я хочу, является эквивалентом типичного параметра типа в C#, если есть лучший способ подражать этому в 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
Если я закомментировать вызов, чтобы проверить(), код работает нормально, так что, по-видимому, это по крайней мере, хорошо для меня, чтобы использовать смешанный тип параметра в объявлении функции.
Я знаю, что встроенные функции PHP, такие как gettype(), могут принимать смешанные параметры, хотя я не знаю, внутренне ли они используют строгую типизацию.
Я вижу, что «смешанный» также используется как псевдо-тип в PHP documentation, поэтому я могу неправильно понять цель «смешанного» как ключевое слово PHP, но то, что я вижу здесь, по крайней мере, подразумевает, что это законное ключевое слово. Я просто использую его так, как он не предназначен?
Наконец, я понимаю, что могу обойти все это, просто не указывая тип параметра, но я хотел бы быть последовательным, указав все мои параметры и возвращаемые типы.
Благодарим вас и сообщите, если я могу предоставить дополнительную информацию.
Да, 'mixed' не реальный тип. И постоянство является ортогональным к правильной семантике здесь. – mario
FYI смешанный не тип. (http://php.net/manual/en/language.pseudo-types.php) Это всего лишь ** псевдо-тип **: подсказка о том, что любой тип может быть передан или возвращен из метода ... или возможно, для переменной, которая была свободно напечатана как смешанная по любой причине ... В отличие от C#, то, что вы пытаетесь достичь, может быть сложным в PHP, особенно ** со строкой_types, установленным в true **. Тем не менее, вы можете добиться почти аналогичного эффекта без Strict Typing, и в этом случае ваши методы могут принимать любой тип, если вы не даете никаких подсказок типа. Хотя для программистов на C# это еще плохо, но это сок PHP ** – Poiz
Большое спасибо марио и поэзия. Похоже, я просто соглашусь добавить/* mixed */в качестве комментария. – FSharpN00b