Edit report at https://bugs.php.net/bug.php?id=62922&edit=1
ID: 62922 Comment by: riptide dot tempora at opinehub dot com Reported by: dagguh at gmail dot com Summary: Truncating entire string should result in string Status: Open Type: Feature/Change Request Package: Strings related PHP Version: 5.3.16 Block user comment: N Private report: N New Comment: Unless there is some specific compatibility issue that would be raised if your change were implemented, I agree. Previous Comments: ------------------------------------------------------------------------ [2012-08-24 14:31:06] dagguh at gmail dot com <? public static function endsWith($string, $suffix) { return 1 === preg_match("/{$suffix}$/", $string); } It should return a boolean :) Thanks :) ------ Still, it would be more logical if substr returned an empty string. I guess backward compatiblity is more important than consistency. >From http://tr.php.net/manual/en/function.substr.php: If string is less than or equal to start characters long, FALSE will be returned. would become: If string is less than start characters long, FALSE will be returned. ------------------------------------------------------------------------ [2012-08-24 14:24:31] riptide dot tempora at opinehub dot com <? public static function endsWith($string, $suffix) { return preg_match("/{$suffix}$/", $string); } ?> No need to rewrite the language :) ------------------------------------------------------------------------ [2012-08-24 14:21:21] dagguh at gmail dot com Sheer logic. What remains from a 4-character string after cutting 4 characters? An empty string. In practice it would allow for a cleaner code, like: --------- public static function endsWith($string, $suffix) { $suffixLength = strlen($suffix); return $suffix === substr($string, -$suffixLength); } -------- Method endsWith returns true for: endsWith("kebab", "ebab"); endsWith("kebab", "bab"); endsWith("kebab", "ab"); endsWith("kebab", "b"); but it returns false for endsWith("kebab", "kebab"); ------------------------------------------------------------------------ [2012-08-24 12:28:43] larue...@php.net what can we gain from changing this? except the bc break? ------------------------------------------------------------------------ [2012-08-24 10:16:57] dagguh at gmail dot com Description: ------------ --- >From manual page: http://www.php.net/function.substr#refsect1-function.substr- description --- Truncating an entire string should result in a string. When $start is equal to strlen($string), an empty string should be returned instead of FALSE. Test script: --------------- var_dump(substr("", 0)); var_dump(substr("a", 1)); var_dump(substr("ab", 2)); Expected result: ---------------- string(0) "" string(0) "" string(0) "" Actual result: -------------- bool(false) bool(false) bool(false) ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=62922&edit=1