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

Reply via email to