Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

PHP 8.1: fix "passing null to non-nullable" #174

Conversation

jrfnl
Copy link
Contributor

@jrfnl jrfnl commented Sep 16, 2024

As of PHP 8.1, passing null to not explicitly nullable scalar parameters for PHP native functions is deprecated.

In this case, the Test_Table_Ascii::testSpacingInTable() method passes a row with the following values: array('A2', '', ' C2', null). This then hits this deprecation in the cli\table\Ascii::row() method when calling the PHP native str_replace() function on line 141.

This can be seen when running the unit tests with --display-deprecations:

1) path/to/php-cli-tools/lib/cli/table/Ascii.php:141
str_replace(): Passing null to parameter #3 ($subject) of type array|string is deprecated

Triggered by:

* Test_Table_Ascii::testSpacingInTable
  path/to/php-cli-tools/tests/Test_Table_Ascii.php:120

There are two options here:

  1. Fix the test to pass an empty string instead of null for the fourth cell.
  2. Fix the method under test to handle potential null values more elegantly.

I'm not sure what the desired solution is in this case, so I've implemented solution 2 to maintain the existing behaviour, but can change this to solution 1 if so desired.

Refs:

As of PHP 8.1, passing `null` to not explicitly nullable scalar parameters for PHP native functions is deprecated.

In this case, the `Test_Table_Ascii::testSpacingInTable()` method passes a row with the following values: `array('A2', '', ' C2', null)`.
This then hits this deprecation in the `cli\table\Ascii::row()` method when calling the PHP native `str_replace()` function on line 141.

This can be seen when running the unit tests with `--display-deprecations`:
```
1) path/to/php-cli-tools/lib/cli/table/Ascii.php:141
str_replace(): Passing null to parameter #3 ($subject) of type array|string is deprecated

Triggered by:

* Test_Table_Ascii::testSpacingInTable
  path/to/php-cli-tools/tests/Test_Table_Ascii.php:120
```

There are two options here:
1. Fix the test to pass an empty string instead of `null` for the fourth cell.
2. Fix the method under test to handle potential `null` values more elegantly.

I'm not sure what the desired solution is in this case, so I've implemented solution 2 to maintain the existing behaviour, but can change this to solution 1 if so desired.

Refs:
* https://wiki.php.net/rfc/deprecate_null_to_scalar_internal_arg
@jrfnl jrfnl requested a review from a team as a code owner September 16, 2024 23:49
@swissspidy swissspidy merged commit 615bdb6 into wp-cli:master Sep 17, 2024
15 checks passed
@jrfnl jrfnl deleted the feature/php-8.1-fix-passing-null-to-non-nullable branch September 17, 2024 15:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants