wp/wp-includes/compat.php
changeset 19 3d72ae0968f4
parent 18 be944660c56a
child 21 48c4eec2b7e6
--- a/wp/wp-includes/compat.php	Wed Sep 21 18:19:35 2022 +0200
+++ b/wp/wp-includes/compat.php	Tue Sep 27 16:37:53 2022 +0200
@@ -79,6 +79,10 @@
  * @return string Extracted substring.
  */
 function _mb_substr( $str, $start, $length = null, $encoding = null ) {
+	if ( null === $str ) {
+		return '';
+	}
+
 	if ( null === $encoding ) {
 		$encoding = get_option( 'blog_charset' );
 	}
@@ -371,6 +375,109 @@
 	}
 }
 
+if ( ! function_exists( 'array_key_first' ) ) {
+	/**
+	 * Polyfill for array_key_first() function added in PHP 7.3.
+	 *
+	 * Get the first key of the given array without affecting
+	 * the internal array pointer.
+	 *
+	 * @since 5.9.0
+	 *
+	 * @param array $arr An array.
+	 * @return string|int|null The first key of array if the array
+	 *                         is not empty; `null` otherwise.
+	 */
+	function array_key_first( array $arr ) {
+		foreach ( $arr as $key => $value ) {
+			return $key;
+		}
+	}
+}
+
+if ( ! function_exists( 'array_key_last' ) ) {
+	/**
+	 * Polyfill for `array_key_last()` function added in PHP 7.3.
+	 *
+	 * Get the last key of the given array without affecting the
+	 * internal array pointer.
+	 *
+	 * @since 5.9.0
+	 *
+	 * @param array $arr An array.
+	 * @return string|int|null The last key of array if the array
+	 *.                        is not empty; `null` otherwise.
+	 */
+	function array_key_last( array $arr ) {
+		if ( empty( $arr ) ) {
+			return null;
+		}
+		end( $arr );
+		return key( $arr );
+	}
+}
+
+if ( ! function_exists( 'str_contains' ) ) {
+	/**
+	 * Polyfill for `str_contains()` function added in PHP 8.0.
+	 *
+	 * Performs a case-sensitive check indicating if needle is
+	 * contained in haystack.
+	 *
+	 * @since 5.9.0
+	 *
+	 * @param string $haystack The string to search in.
+	 * @param string $needle   The substring to search for in the haystack.
+	 * @return bool True if `$needle` is in `$haystack`, otherwise false.
+	 */
+	function str_contains( $haystack, $needle ) {
+		return ( '' === $needle || false !== strpos( $haystack, $needle ) );
+	}
+}
+
+if ( ! function_exists( 'str_starts_with' ) ) {
+	/**
+	 * Polyfill for `str_starts_with()` function added in PHP 8.0.
+	 *
+	 * Performs a case-sensitive check indicating if
+	 * the haystack begins with needle.
+	 *
+	 * @since 5.9.0
+	 *
+	 * @param string $haystack The string to search in.
+	 * @param string $needle   The substring to search for in the `$haystack`.
+	 * @return bool True if `$haystack` starts with `$needle`, otherwise false.
+	 */
+	function str_starts_with( $haystack, $needle ) {
+		if ( '' === $needle ) {
+			return true;
+		}
+		return 0 === strpos( $haystack, $needle );
+	}
+}
+
+if ( ! function_exists( 'str_ends_with' ) ) {
+	/**
+	 * Polyfill for `str_ends_with()` function added in PHP 8.0.
+	 *
+	 * Performs a case-sensitive check indicating if
+	 * the haystack ends with needle.
+	 *
+	 * @since 5.9.0
+	 *
+	 * @param string $haystack The string to search in.
+	 * @param string $needle   The substring to search for in the `$haystack`.
+	 * @return bool True if `$haystack` ends with `$needle`, otherwise false.
+	 */
+	function str_ends_with( $haystack, $needle ) {
+		if ( '' === $haystack && '' !== $needle ) {
+			return false;
+		}
+		$len = strlen( $needle );
+		return 0 === substr_compare( $haystack, $needle, -$len, $len );
+	}
+}
+
 // IMAGETYPE_WEBP constant is only defined in PHP 7.1 or later.
 if ( ! defined( 'IMAGETYPE_WEBP' ) ) {
 	define( 'IMAGETYPE_WEBP', 18 );
@@ -378,5 +485,5 @@
 
 // IMG_WEBP constant is only defined in PHP 7.0.10 or later.
 if ( ! defined( 'IMG_WEBP' ) ) {
-	define( 'IMG_WEBP', IMAGETYPE_WEBP ); // phpcs:ignore PHPCompatibility.Constants.NewConstants.imagetype_webpFound
+	define( 'IMG_WEBP', IMAGETYPE_WEBP );
 }