2 回答

TA貢獻1893條經驗 獲得超10個贊
...您嘗試在線使用的splat 運算符new $mailerClass(...$mailerClassParams)無法與像您這樣的關聯數組一起使用$data
我可以看到您用于可郵寄類的構造函數是public function __construct($data)這樣您應該能夠使用new $mailerClass($mailerClassParams)
如果您確實有一個在構造函數中具有多個參數的可郵寄類,那么public function __construct($email, $token, $name)您仍然可以將其作為 1 個數組參數傳遞,并檢查傳遞的數組的內容。或使用new $mailerClass(...array_values($mailerClassParams)). 但是,請注意,如果您使用 end up using ,array_values()那么數組的順序實際上很重要,因為這就是它將如何映射參數,以便$mailerClassParams數組的第一個條目始終是第一個參數,因此這不是推薦的方式。
function sendMailWithMailerClass($mailTo, $mailerClass, $mailerClassParams)
{
try{
// Remove ... splat operator here
Mail::to($mailTo)->send(new $mailerClass($mailerClassParams));
} catch (Exception $e) {
}
}
// make sure all your $mailClass constructors take 1 parameter
public function __construct($data)
{
$this->data = $data;
}
或者
function sendMailWithMailerClass($mailTo, $mailerClass, $mailerClassParams)
{
try{
// Remove keys of the associative array with array_values
Mail::to($mailTo)->send(new $mailerClass(...array_values($mailerClassParams)));
} catch (Exception $e) {
}
}
// make sure all constructor takes correct parameters in the correct order
public function __construct($email, $token, $name)
{
$this->data = [
'email' => $email,
'token' => $token,
'name' => $name,
];
}

TA貢獻1789條經驗 獲得超10個贊
它是從 PHP 8.1 開始實現的。
$args = [
? ? ...['z' => 2, 'x' => 3],
? ? ...['y' => 1, 'x' => 4],
];
class Foo
{
? ? public function __construct(int $x, int $y, int $z)
? ? {
? ? ? ? echo <<<OUTPUT
? ? ? ? ? ? x = $x
? ? ? ? ? ? y = $y
? ? ? ? ? ? z = $z
? ? ? ? OUTPUT;
? ? }
}
new Foo(...$args);
/* Output:
?* x = 4
?* y = 1
?* z = 2
?*/
- 2 回答
- 0 關注
- 240 瀏覽
添加回答
舉報