PR: https://github.com/php/php-src/pull/4797
- Standard:
- . Added fdiv() method, which performs a floating-point division under
+ . Added str_contains($haystack, $needle) function, which checks whether
+ $haystack contains $needle as a sub-string. It is equivalent to writing
+ strpos($haystack, $needle) !== false.
+ . Added fdiv() function, which performs a floating-point division under
IEEE 754 semantics. Division by zero is considered well-defined and
will return one of Inf, -Inf or NaN.
PHP_FE(strtok, arginfo_strtok)
PHP_FE(strtoupper, arginfo_strtoupper)
PHP_FE(strtolower, arginfo_strtolower)
+ PHP_FE(str_contains, arginfo_str_contains)
PHP_FE(strpos, arginfo_strpos)
PHP_FE(stripos, arginfo_stripos)
PHP_FE(strrpos, arginfo_strrpos)
function strrchr(string $haystack, string $needle): string|false {}
+function str_contains(string $haystack, string $needle): bool {}
+
function chunk_split(string $str, int $chunklen = 76, string $ending = "\r\n"): string {}
function substr(string $str, int $start, ?int $length = null): string|false {}
ZEND_ARG_TYPE_INFO(0, needle, IS_STRING, 0)
ZEND_END_ARG_INFO()
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_str_contains, 0, 2, _IS_BOOL, 0)
+ ZEND_ARG_TYPE_INFO(0, haystack, IS_STRING, 0)
+ ZEND_ARG_TYPE_INFO(0, needle, IS_STRING, 0)
+ZEND_END_ARG_INFO()
+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_chunk_split, 0, 1, IS_STRING, 0)
ZEND_ARG_TYPE_INFO(0, str, IS_STRING, 0)
ZEND_ARG_TYPE_INFO(0, chunklen, IS_LONG, 0)
PHP_FUNCTION(dirname);
PHP_FUNCTION(pathinfo);
PHP_FUNCTION(strstr);
+PHP_FUNCTION(str_contains);
PHP_FUNCTION(strpos);
PHP_FUNCTION(stripos);
PHP_FUNCTION(strrpos);
}
/* }}} */
+/* {{{ proto bool str_contains(string haystack, string needle)
+ Checks if a string contains another */
+PHP_FUNCTION(str_contains)
+{
+ zend_string *haystack, *needle;
+
+ ZEND_PARSE_PARAMETERS_START(2, 2)
+ Z_PARAM_STR(haystack)
+ Z_PARAM_STR(needle)
+ ZEND_PARSE_PARAMETERS_END();
+
+ RETURN_BOOL(php_memnstr(ZSTR_VAL(haystack), ZSTR_VAL(needle), ZSTR_LEN(needle), ZSTR_VAL(haystack) + ZSTR_LEN(haystack)));
+}
+/* }}} */
+
/* {{{ proto string strchr(string haystack, string needle)
An alias for strstr */
/* }}} */
--- /dev/null
+--TEST--
+Test str_contains() function
+--FILE--
+<?php
+/* Prototype: str_contains ( string $haystack , string $needle ) : bool
+ Description: Check if a string contains another string
+ Source code: ext/standard/string.c
+*/
+var_dump(str_contains("test string", "test"));
+var_dump(str_contains("test string", "string"));
+var_dump(str_contains("test string", "strin"));
+var_dump(str_contains("test string", "t s"));
+var_dump(str_contains("test string", "g"));
+var_dump(str_contains("te".chr(0)."st", chr(0)));
+var_dump(str_contains("tEst", "test"));
+var_dump(str_contains("teSt", "test"));
+var_dump(str_contains("", ""));
+var_dump(str_contains("a", ""));
+var_dump(str_contains("", "a"));
+var_dump(str_contains("\\\\a", "\\a"));
+?>
+--EXPECT--
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(false)
+bool(false)
+bool(true)
+bool(true)
+bool(false)
+bool(true)