gpt4 book ai didi

php - 如何在我自己的函数中使用混合参数类型?

转载 作者:可可西里 更新时间:2023-10-31 22:12:19 30 4
gpt4 key购买 nike

我想定义一个采用混合类型参数的 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() 的调用,代码运行良好,所以显然我至少可以在函数声明中使用混合参数类型。

我知道 gettype() 等内置 PHP 函数可以采用混合参数,但我不知道它们是否在内部使用严格类型化。

我看到“混合”在 PHP 中也用作伪类型 documentation ,所以我可能会误解“混合”作为 PHP 关键字的用途,但我在这里看到的内容至少向我暗示它是一个合法的关键字。我是否只是以非预期的方式使用它?

最后,我意识到我可以通过简单地不指定参数类型来规避这一切,但我希望通过指定所有参数和返回类型来保持一致。

谢谢,如果我可以提供任何其他信息,请告诉我。

最佳答案

FYI mixed is not a Type. (Refer to the Documentation). It is only a pseudo type: a Hint that any Type might be passed to or returned from a Method... or perhaps for a variable which was loosely typed as mixed for any reason...

与 C# 不同,您尝试实现的目标在 PHP 中可能很棘手,尤其是strict_types 设置为 true

但是,您可以在没有严格类型化的情况下实现几乎相似的效果 - 在这种情况下,您的方法可以接受任何类型,只要您不提供任何类型提示。虽然对于 C# 程序员来说,这很糟糕 - 然而,这就是 PHP 的魅力

关于php - 如何在我自己的函数中使用混合参数类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37199403/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com