diff --git a/application/utils.inc.php b/application/utils.inc.php index 469c9dd22..6b7c4ac35 100644 --- a/application/utils.inc.php +++ b/application/utils.inc.php @@ -2819,6 +2819,23 @@ HTML; return $aPrefs[$sShortcutId]; } + //---------------------------------------------- + // PHP function helpers + //---------------------------------------------- + + /** + * Helper around the native strlen() PHP method to keep allowing usage of null value when computing the length of a string as null value is no longer allowed with PHP 8.1+ + * + * @param string|null $sString + * + * @return int Length of $sString, 0 if null + * @since 3.0.2 N°5172 + */ + public static function StrLen(?string $sString): int + { + return strlen($sString ?? ''); + } + //---------------------------------------------- // Environment helpers //---------------------------------------------- diff --git a/test/application/UtilsTest.php b/test/application/UtilsTest.php index 462ad1eb7..d5ff5ca8f 100644 --- a/test/application/UtilsTest.php +++ b/test/application/UtilsTest.php @@ -605,4 +605,26 @@ class UtilsTest extends \Combodo\iTop\Test\UnitTest\ItopTestCase '2G' => ['2G', 2 * 1024 * 1024 * 1024], ]; } + + /** + * @param string|null $sString + * @param int $iExpected + * + * @dataProvider StrLenProvider + */ + public function testStrLen(?string $sString, int $iExpected) + { + $iComputed = utils::StrLen($sString); + self::assertEquals($iExpected, $iComputed, 'Length was not as expected'); + } + + public function StrLenProvider(): array + { + return [ + 'null value' => [null, 0], + '0 character' => ['', 0], + '1 character' => ['a', 1], + '5 characters' => ['abcde', 5], + ]; + } }