Skip to content
11 changes: 8 additions & 3 deletions generators/php/codegen/src/ast/Method.ts
Original file line number Diff line number Diff line change
Expand Up @@ -75,9 +75,14 @@ export class Method extends AstNode {
writer.write(`${this.access}${this.static_ ? " static" : ""} function ${this.name}(`);

// NOTE: Put all required parameters before all optional parameters
// since this is required by PHPStan
const requiredParameters = this.parameters.filter((param) => !param.type.isOptional());
const optionalParameters = this.parameters.filter((param) => param.type.isOptional());
// since this is required by PHPStan. Parameters with an initializer
// (default value) are also considered optional in PHP.
const requiredParameters = this.parameters.filter(
(param) => !param.type.isOptional() && param.initializer == null
);
const optionalParameters = this.parameters.filter(
(param) => param.type.isOptional() || param.initializer != null
);

const orderedParameters = [...requiredParameters, ...optionalParameters];

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
- summary: |
Fix method parameter ordering to place parameters with default values after
required parameters, resolving PHPStan deprecation errors in PHP 8.0+.
type: fix

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading