我希望定义一个PHP 7函数,它需要一个混合类型的参数。(我的目标是实现C#中泛型类型参数的等效方式;如果在PHP 7中有更好的模拟方法,请告诉我。)
我的代码如下。
当我运行这段代码时,我得到了以下结果。
如果我注释掉对test()函数的调用,代码就可以正常运行,因此显然在函数声明中使用混合参数类型至少是可以的。
我知道像gettype()这样的内置PHP函数可以接受混合参数,但我不知道它们是否在内部使用严格类型。
我发现“mixed”也被用作PHP 文档中的伪类型,所以我可能误解了“mixed”作为PHP关键字的目的,但我至少从这里看到的意味着它是一个合法的关键字。我是否只是在以一种它不打算使用的方式使用它?
最后,我意识到我可以通过简单地不指定参数类型来规避所有这些问题,但我希望通过指定所有我的参数和返回类型来保持一致。
谢谢你,请告诉我是否需要提供任何其他信息。
我的代码如下。
<?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()函数的调用,代码就可以正常运行,因此显然在函数声明中使用混合参数类型至少是可以的。
我知道像gettype()这样的内置PHP函数可以接受混合参数,但我不知道它们是否在内部使用严格类型。
我发现“mixed”也被用作PHP 文档中的伪类型,所以我可能误解了“mixed”作为PHP关键字的目的,但我至少从这里看到的意味着它是一个合法的关键字。我是否只是在以一种它不打算使用的方式使用它?
最后,我意识到我可以通过简单地不指定参数类型来规避所有这些问题,但我希望通过指定所有我的参数和返回类型来保持一致。
谢谢你,请告诉我是否需要提供任何其他信息。
https://www.php.net/manual/en/language.pseudo-types.php
是一个失效的链接。) - mickmackusa