PHP7.4 から PHP8 に変更したらこんなエラーが出た。
Deprecated: Optional parameter $param declared before required parameter $param2 is implicitly treated as a required parameter in … on line …
Optional parameter を required parameter の前に設置するのは暗黙的に required parameter として扱われる、という内容のエラー文です。
Optional parameter はデフォルト値を設定した引数で、 required parameter は必須の引数、つまりデフォルト値がない引数。
PHP8.0.0 から、デフォルト値を設定した引数の後ろに必須の引数を持ってきた場合は、デフォルト値を設定した引数のデフォルト値がなくなり、必須の引数として振る舞うこととなったようです。
参考: https://www.php.net/manual/ja/migration80.deprecated.php#migration80.deprecated.core
今回のことをコードで説明すると、
<?php
// $var2 の引数の前に $var のデフォルト値を設定した引数があるのでエラー文が表示される
function foo($param = '', $param2) {}
// こうすればよい
function foo($param, $param2) {}
function foo($param2, $param = '') {}
例外で、 Type $param = null の場合は型が暗黙的に nullable であることを示すためエラーが出ない模様。
ということで、このエラーが出た際は、必須の引数に変更するか引数の順番を変えるしましょう!