已弃用:必要参数$to_addr在可选参数之后

10

我不理解为什么出现了这个消息(php8)。

谢谢

Deprecated: Required parameter $to_addr follows optional parameter $to_name in /home/www/admin/OM/Mail.php on line 237

Deprecated: Required parameter $to_email_address follows optional parameter $to_name in /home/www/admin/OM/Mail.php on line 363

public function send(string $to_name = '', string $to_addr, string $from_name, string $from_addr, string $subject = '', bool $reply_to = false): bool

你尝试了解给定的错误信息吗?你卡在哪里了? - Nico Haase
1个回答

14
在 PHP 8 中,新增了命名参数。这意味着从现在开始,没有默认值的参数必须放在可选参数之前。
可选参数是指具有默认值的参数:function example(string $optional = '');。我们称它们为可选参数,因为它们是可选的,您可以像以下方式调用函数:example();
因此,您的原型应更改为:
public function send(string $to_name = '', string $to_addr, string $from_name, string $from_addr, string $subject = '', bool $reply_to = false): bool

public function send(string $to_addr, string $from_name, string $from_addr, string $to_name = '', string $subject = '', bool $reply_to = false): bool

您可以在这里阅读更多相关信息:https://www.php.net/manual/en/functions.arguments.php


2
你的第一句话并没有真正意义上的意思。添加命名参数与弃用完全是巧合;在必填参数之前使用可选参数从来就没有意义。 - IMSoP
在 PHP 的内部讨论中。 - Harm Smits
该更改于2020年1月合并(https://github.com/php/php-src/pull/5067),而命名参数RFC直到5月才被重新启动。后来发现,命名参数意外地允许调用省略了参数序列外的参数,在8.1中已经被撤销;请参见此当前线程(https://externals.io/message/116597)。 - IMSoP
1
不会的,因为它们已经到了生命周期的尽头。@Najeeb - Harm Smits

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接