rfc:add_str_begin_and_end_functions

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
rfc:add_str_begin_and_end_functions [2019/06/18 18:39]
wkhudgins92 Updated to reflect feedback obtained during the github PR process
rfc:add_str_begin_and_end_functions [2019/07/22 08:47]
nikic Close voting
Line 1: Line 1:
-====== PHP RFC: Add str begin and end functions ====== +====== PHP RFC: Add str_starts_with(),​ str_ends_with() ​and related ​functions ====== 
-  * Version: 0.2+  * Version: 0.4
   * Date: 2016-08-01 (use today'​s date here) **Updated: 2019-06-18**   * Date: 2016-08-01 (use today'​s date here) **Updated: 2019-06-18**
   * Author: Will Hudgins, will@wkhudgins.info   * Author: Will Hudgins, will@wkhudgins.info
-  * Status: ​Under Discussion+  * Status: ​Declined
   * First Published at: https://​wiki.php.net/​rfc/​add_str_begin_and_end_functions   * First Published at: https://​wiki.php.net/​rfc/​add_str_begin_and_end_functions
  
Line 10: Line 10:
  
 ===== Proposal ===== ===== Proposal =====
-Add str_begins(), str_ibegins(), str_ends(), str_iends(), mb_str_begins(), mb_str_ibegins(), mb_str_ends(), and mb_str_iends() functions+Add str_starts_with(), str_starts_with_ci(), str_ends_with(), str_ends_with_ci(), mb_str_starts_with(), mb_str_starts_with_ci(), mb_str_ends_with(), and mb_str_ends_with_ci() functions:
  
-  boolean str_begins[(string $haystack, string $needle)] +<​PHP>​ 
-  ​boolean str_ibegins[(string $haystack, string $needle)] +function str_starts_with(string $haystack, string $needle): bool 
-  ​boolean str_ends[(string $haystack, string $needle)] +function str_starts_with_ci(string $haystack, string $needle): bool 
-  ​boolean str_iends[(string $haystack, string $needle)] +function str_ends_with(string $haystack, string $needle): bool 
-  ​boolean mb_str_begins[(string $haystack, string $needle [, string $encoding])] +function str_ends_with_ci(string $haystack, string $needle): bool 
-  ​boolean mb_str_ibegins[(string $haystack, string $needle [, string $encoding])] +function mb_str_starts_with(string $haystack, string $needle [, string $encoding]): bool 
-  ​boolean mb_str_ends[(string $haystack, string $needle [, string $encoding])] +function mb_str_starts_with_ci(string $haystack, string $needle [, string $encoding]): bool 
-  ​boolean mb_str_iends[(string $haystack, string $needle [, string $encoding])]+function mb_str_ends_with(string $haystack, string $needle [, string $encoding]): bool 
 +function mb_str_ends_with_ci(string $haystack, string $needle [, string $encoding]): bool 
 +</​PHP>​
   ​   ​
-str_begins() checks if $haystack begins with $needle. It accomplishes this by comparing each character in $haystack with the corresponding character in $needle. If any of the characters do not match, it will return false. ​str_ends() does the same thing except in reverse: it starts at the end of both $haystack and $needle and compares each character in $haystack to the corresponding character in $needle.+str_starts_with() checks if $haystack begins with $needle. It accomplishes this by comparing each character in $haystack with the corresponding character in $needle. If any of the characters do not match, it will return false. ​str_ends_with() does the same thing except in reverse: it starts at the end of both $haystack and $needle and compares each character in $haystack to the corresponding character in $needle.
  
-str_ibegins() and str_iends() do the same thing, except they are case insensitive.+str_starts_with_ci() and str_ends_with_ci() do the same thing, except they are case insensitive.
  
 The mb_* versions of these method function very similar except they make use of the mbfl_strpos() function or the php_mb_stripos() helper function. The mb_* versions of these method function very similar except they make use of the mbfl_strpos() function or the php_mb_stripos() helper function.
  
 Examples below: Examples below:
-  ​$str = "​beginningMiddleEnd";​ + 
-  if (str_begin("​beg"​, $str)) +<​PHP>​ 
-      echo "This condition would be true";​ +$str = "​beginningMiddleEnd";​ 
-   ​if (str_begins("​Beg"​, $str)) +if (str_starts_with($str, "​beg"​)) 
-       ​echo "This condition would not be true";​ +    echo "This condition would be true";​ 
-   ​if (str_ibegin("​beg"​, $str)) +if (str_starts_with($str, "​Beg"​)) 
-       ​echo "This condition would be true";​ +    echo "This condition would not be true";​ 
-   ​if (str_ibegin("​Beg"​, $str)) +if (str_starts_with_ci($str, "​beg"​)) 
-       ​echo "This condition would also be true";​ +    echo "This condition would be true";​ 
-   ​if (str_end("​End"​, $str)) +if (str_starts_with_ci($str, "​Beg"​)) 
-      echo "This condition would be true";​ +    echo "This condition would also be true";​ 
-   ​if (str_end("​end"​, $str)) +if (str_ends_with($str, "​End"​)) 
-       ​echo "This condition would not be true";​ +    echo "This condition would be true";​ 
-   ​if (str_iend("​End"​, $str)) +if (str_ends_with($str, "​end"​)) 
-       ​echo "This condition would be true";​ +    echo "This condition would not be true";​ 
-   ​if (str_iend("​end"​, $str)) +if (str_ends_with_ci($str, "​End"​)) 
-       ​echo "This condition would also be true";+    echo "This condition would be true";​ 
 +if (str_ends_with_ci($str, "​end"​)) 
 +    echo "This condition would also be true"; 
 +</​PHP>​
  
 ===== Backward Incompatible Changes ===== ===== Backward Incompatible Changes =====
-None.+This could break functions existing in userland with the same names.
  
 ===== Proposed PHP Version(s) ===== ===== Proposed PHP Version(s) =====
-Next PHP 7.x release.+Next eligible ​PHP 7.x release.
  
 ===== RFC Impact ===== ===== RFC Impact =====
Line 57: Line 62:
  
 ==== To Existing Extensions ==== ==== To Existing Extensions ====
-Adds mb_str_begins(), mb_str_ibegins(), mb_str_ends(), and mb_str_iends() to the mbstring extension.+Adds mb_str_starts_with(), mb_str_starts_with_ci(), mb_str_ends_with(), and mb_str_ends_with_ci() to the mbstring extension.
  
 ==== To Opcache ==== ==== To Opcache ====
Line 76: Line 81:
  
 ===== Future Scope ===== ===== Future Scope =====
 +
 Once this feature is approved and added, it will not need any future improvements. Once this feature is approved and added, it will not need any future improvements.
  
-===== Proposed Voting Choices ​===== +===== Vote ===== 
-This project requires a 2/3 majority to be approved.+ 
 +Voting closes 2019-07-20. 
 + 
 +<doodle  
 +title="​Do you want str_starts_with,​ str_starts_with_ci,​ str_ends_with,​ and str_ends_with_ci functions in PHP 7.4?" auth="​user"​ voteType="​single"​ closed="​yes">​ 
 +   * yes 
 +   * no 
 +</doodle>​ 
 + 
 +---- 
 + 
 +<doodle  
 +title="​Do you want mb_str_starts_with,​ mb_str_starts_with_ci,​ mb_str_ends_with,​ and mb_str_ends_with_ci functions in PHP 7.4?" auth="​user"​ voteType="​single"​ closed="​yes">​ 
 +   * yes 
 +   * no 
 +</​doodle>​
  
 ===== Patches and Tests ===== ===== Patches and Tests =====
Line 91: Line 112:
  
 ===== References ===== ===== References =====
-Links to external references, discussions or RFCs+Implementation of similar methods/​functions in other languages:​ 
 + 
 +https://​developer.mozilla.org/​en-US/​docs/​Web/​JavaScript/​Reference/​Global_Objects/​String/​startsWith 
 + 
 +https://​developer.mozilla.org/​en-US/​docs/​Web/​JavaScript/​Reference/​Global_Objects/​String/​endsWith 
 + 
 +https://​docs.python.org/​3/​library/​stdtypes.html?​highlight=startswith#​str.startswith 
 + 
 +https://​docs.python.org/​3/​library/​stdtypes.html?​highlight=startswith#​str.endswith 
 + 
 +https://​docs.oracle.com/​javase/​7/​docs/​api/​java/​lang/​String.html#​startsWith(java.lang.String) 
 + 
 +http://​ruby-doc.org/​core-2.1.1/​String.html#​method-i-start_with-3F 
 + 
 +https://​commons.apache.org/​proper/​commons-lang/​apidocs/​org/​apache/​commons/​lang3/​StringUtils.html#​startsWithIgnoreCase-java.lang.CharSequence-java.lang.CharSequence- 
 + 
 +https://​golang.org/​pkg/​strings/#​HasPrefix 
 + 
 +https://​hackage.haskell.org/​package/​MissingH-1.4.0.1/​docs/​Data-String-Utils.html#​v:​startswith
  
 Related feature request: [[bugid@50434]]. Related feature request: [[bugid@50434]].
rfc/add_str_begin_and_end_functions.txt · Last modified: 2019/07/22 08:47 by nikic