Преобразование PHP CamelCase в Snake Case: подробное руководство

В PHP-программировании часто встречаются ситуации, когда нужно преобразовать строки из CamelCase в змеиный регистр. CamelCase — это соглашение, согласно которому слова объединяются, и каждое слово начинается с заглавной буквы, кроме первого. С другой стороны, «змеиный регистр» — это соглашение, в котором слова разделяются подчеркиванием, а все буквы пишутся строчными буквами. В этой статье мы рассмотрим различные методы преобразования строк CamelCase в змеиный регистр в PHP.

Метод 1. Использование preg_replace и регулярных выражений

Один из способов преобразования CamelCase в змеиный регистр — использование функции preg_replace с регулярными выражениями. Вот пример:

function camelCaseToSnakeCase($input) {
    return strtolower(preg_replace('/(?<!^)[A-Z]/', '_$0', $input));
}
$input = 'camelCaseString';
$snakeCase = camelCaseToSnakeCase($input);
echo $snakeCase; // Output: camel_case_string

Объяснение: регулярное выражение соответствует любой заглавной букве, кроме первой, с использованием утверждения отрицательного просмотра назад. Затем совпадение заменяется подчеркиванием, за которым следует совпадающая прописная буква, преобразованная в строчную.

Метод 2: использование str_split и implode

Другой подход включает преобразование строки CamelCase в массив символов, добавление подчеркиваний перед каждой заглавной буквой и, наконец, объединение их обратно в строку с помощью implode:

function camelCaseToSnakeCase($input) {
    $chars = str_split($input);
    $snakeCase = '';

    foreach ($chars as $char) {
        if (ctype_upper($char)) {
            $snakeCase .= '_' . strtolower($char);
        } else {
            $snakeCase .= $char;
        }
    }

    return $snakeCase;
}
$input = 'camelCaseString';
$snakeCase = camelCaseToSnakeCase($input);
echo $snakeCase; // Output: camel_case_string

Объяснение: Этот метод перебирает каждый символ входной строки. Если символ имеет верхний регистр, добавляется подчеркивание, за которым следует версия символа в нижнем регистре. В противном случае он напрямую объединяет символ с полученной строкой змеиного регистра.

Метод 3. Использование ucwords и str_replace

Если вы предпочитаете более краткое решение, вы можете использовать функции ucwords и str_replace для достижения преобразования:

function camelCaseToSnakeCase($input) {
    $words = ucwords(preg_replace('/(?<!^)[A-Z]/', ' $0', $input));
    return strtolower(str_replace(' ', '_', $words));
}
$input = 'camelCaseString';
$snakeCase = camelCaseToSnakeCase($input);
echo $snakeCase; // Output: camel_case_string

Объяснение: регулярное выражение в этом методе добавляет пробел перед каждой заглавной буквой, кроме первой. Затем ucwords делает первую букву каждого слова заглавной. Наконец, str_replace заменяет пробелы подчеркиваниями, а strtolower преобразует строку в нижний регистр.

В этой статье мы рассмотрели несколько методов преобразования строк PHP CamelCase в змеиный регистр. Предпочитаете ли вы использовать регулярные выражения, манипуляции с массивами или строковые функции, вы можете выбрать метод, который соответствует вашему стилю кодирования и требованиям. Придерживаясь единых соглашений об именах, вы сможете писать более чистый и читаемый код.