1

Str ends with: примеры (PHP)

Функция str_ends_with в PHP: полный разбор с примерами
Раздел: Работа со строками
str_ends_with(string haystack, string needle): bool
Функция str_ends_with

Функция str_ends_with проверяет, заканчивается ли заданная строка указанной подстрокой. Она была добавлена в PHP 8.0. Основное применение - валидация суффиксов, проверка расширений файлов, анализ окончаний слов без необходимости написания собственных функций.

Синтаксис и аргументы

Синтаксис: str_ends_with(string $haystack, string $needle): bool

  • $haystack (обязательный) - строка, в которой выполняется поиск.
  • $needle (обязательный) - подстрока, наличие которой проверяется в конце строки $haystack.

Функция возвращает true, если $haystack заканчивается на $needle, и false в противном случае. Проверка чувствительна к регистру.

Простые примеры использования
Базовые проверки
<?php
// Проверка расширения файла
$filename = 'document.pdf';
var_dump(str_ends_with($filename, '.pdf'));

// Проверка окончания строки
$url = 'https://example.com';
var_dump(str_ends_with($url, '.com'));

// Проверка с учетом регистра
$text = 'Hello World';
var_dump(str_ends_with($text, 'world'));
var_dump(str_ends_with($text, 'World'));

// Пустая подстрока
var_dump(str_ends_with('test', ''));
bool(true)
bool(true)
bool(false)
bool(true)
bool(true)
Специальные случаи
<?php
// Когда needle длиннее haystack
var_dump(str_ends_with('abc', 'abcdef'));

// Полное совпадение
var_dump(str_ends_with('test', 'test'));
bool(false)
bool(true)
Похожие функции в PHP
substr() сравнение

Использование substr($haystack, -strlen($needle)) === $needle дает аналогичный результат, но менее читаемо и потенциально менее производительно.

strrpos() вариант

strrpos($haystack, $needle) === strlen($haystack) - strlen($needle) - более сложная конструкция, подверженная ошибкам при пустой строке.

preg_match()

Регулярные выражения preg_match('/' . preg_quote($needle, '/') . '$/') избыточны для простой проверки окончания, но полезны при сложных шаблонах.

Предпочтительнее использовать str_ends_with для проверки фиксированного окончания из-за простоты и ясности кода.

Типичные ошибки
Неправильный порядок аргументов
<?php
// Неправильно: перепутаны haystack и needle
var_dump(str_ends_with('.php', 'script.php'));
bool(false)
Ожидание приведения типов
<?php
// Функция преобразует нестроковые значения
var_dump(str_ends_with(12345, 45));
var_dump(str_ends_with(true, '1'));
bool(true)
bool(false)
Использование в версиях PHP до 8.0
<?php
// Вызовет фатальную ошибку в PHP 7.4
var_dump(str_ends_with('test', 'st'));
Fatal error: Uncaught Error: Call to undefined function str_ends_with()
История изменений

Функция str_ends_with была добавлена в PHP 8.0.0. В PHP 8.3 была добавлена функция mb_str_ends_with для работы с многобайтовыми кодировками.

Изначальная реализация не претерпела изменений в поведении с момента добавления. Все изменения касались только внутренней оптимизации.

Расширенные примеры
Проверка нескольких расширений
Пример php
<?php
function isImageFile($filename) {
    $imageExtensions = ['.jpg', '.png', '.gif', '.webp'];
    foreach ($imageExtensions as $ext) {
        if (str_ends_with($filename, $ext)) {
            return true;
        }
    }
    return false;
}

var_dump(isImageFile('photo.jpg'));
var_dump(isImageFile('document.pdf'));
bool(true)
bool(false)
Обработка пользовательского ввода
Пример php
<?php
$userInput = 'https://site.com/page.php';
$allowedEndings = ['.php', '.html', '.htm'];

$isSafe = false;
foreach ($allowedEndings as $ending) {
    if (str_ends_with($userInput, $ending)) {
        $isSafe = true;
        break;
    }
}

echo $isSafe ? 'Valid' : 'Invalid';
Valid
Использование с mbstring
Пример php
<?php
// Для однобайтовых строк
var_dump(str_ends_with('привет', 'вет'));

// Для многобайтовых корректнее использовать mb_str_ends_with (PHP 8.3+)
if (function_exists('mb_str_ends_with')) {
    var_dump(mb_str_ends_with('привет', 'вет'));
}
bool(true)
bool(true)
Валидация email доменов
Пример php
<?php
function isCorporateEmail($email) {
    $corporateDomains = ['.com', '.org', '.net'];
    foreach ($corporateDomains as $domain) {
        if (str_ends_with($email, $domain)) {
            return true;
        }
    }
    return false;
}

var_dump(isCorporateEmail('user@example.com'));
var_dump(isCorporateEmail('user@example.ru'));
bool(true)
bool(false)
Аналоги в других языках

Str ends with в Python

text = 'example.txt'
result = text.endswith('.txt')
print(result)  # True
True

Str ends with в Javascript

let str = 'hello world';
console.log(str.endsWith('world'));  // true
console.log(str.endsWith('World'));  // false
true
false

Str ends with в MySQL

SELECT 'document.pdf' LIKE '%.pdf';
-- Или
SELECT RIGHT('document.pdf', 4) = '.pdf';
1
1

Основное отличие PHP функции - явное указание подстроки для поиска, в то время как LIKE в MySQL использует шаблоны.

PHP str_ends_with function comments

En
Str ends with Checks if a string ends with a given substring