如何在我自己的函数中使用混合参数类型?
2022-08-30 19:45:12
我想定义一个PHP 7函数,它采用混合类型的参数。(我想要的是 C# 中的泛型类型参数的等效值;如果有更好的方法来模拟 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文档中也被用作伪类型,所以我可能会误解“mixed”作为PHP关键字的目的,但我在这里看到的至少暗示了它是一个合法的关键字。我只是以一种不适合的方式使用它吗?
最后,我意识到我可以通过简单地不指定参数类型来规避所有这些,但我想通过指定所有参数和返回类型来保持一致。
谢谢,如果我能提供任何其他信息,请让我知道。