Skip to content

Commit b70a964

Browse files
committed
PHP 8.1: fix "passing null to non-nullable"
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
1 parent 2d1da47 commit b70a964

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

lib/cli/table/Ascii.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ public function row( array $row ) {
137137
$extra_rows = array_fill( 0, count( $row ), array() );
138138

139139
foreach( $row as $col => $value ) {
140-
140+
$value = $value ?: '';
141141
$value = str_replace( array( "\r\n", "\n" ), ' ', $value );
142142

143143
$col_width = $this->_widths[ $col ];

0 commit comments

Comments
 (0)