Свои геттеры и сеттеры: Как в PhpStorm изменить шаблоны генерируемого кода

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

Изменение шаблонов геттеров и сеттеров в PhpStorm

Для настройки шаблонов, из которых PhpStorm генерирует геттеры и сеттеры, используем встроенный редактор шаблонов. PhpStorm позволяет менять не только внешний вид, но и логику кода в соответствии с потребностями. Для изменения шаблонов следуем следующим шагам:

  • Открываем меню Settings / Preferences (в зависимости от операционной системы, на Windows это File → Settings, на Mac — PhpStorm → Preferences).
  • Переходим в раздел Editor → File and Code Templates → Code.
  • Здесь находим шаблоны под названиями PHP Getter Method и PHP Setter Method. Это те шаблоны, которые PhpStorm использует для генерации кода методов get/set. Для fluent-варианта метода set шаблон отдельный -  PHP Fluent Setter Method

Настройка шаблона геттера

Шаблон геттера отвечает за возвращение значения поля объекта. По умолчанию PhpStorm генерирует геттер в следующем формате:

public function getField(): Type {
    return $this->field;
}

Чтобы изменить шаблон, нужно внести правки в поле Getter Method Template. Например, если мы хотим, чтобы геттер возвращал значение прошедшее через Null-коалесцентный оператор, можем использовать следующий шаблон:

/**
 * @return ${TYPE_HINT}
 */
public ${STATIC} function ${GET_OR_IS}${NAME}()#if(${RETURN_TYPE}): ${RETURN_TYPE}#else#end
{
#if (${STATIC} == "static")
    return self::$${FIELD_NAME} ?? null;
#else
    return $this->${FIELD_NAME} ?? null;
#end
}

Здесь конструкции типа ${FIELD_NAME} — встроенные переменные, вместо которых PhpStorm автоматически подставит соответствующие значения.

Настройка шаблона сеттера

Сеттер используется для изменения значения поля объекта. Стандартный не-fluent шаблон выглядит так:

public function setField(Type $field): void {
    $this->field = $field;
}

Мы можем изменить этот шаблон, чтобы добавить логику проверки входящего значения. Для этого редактируем Setter Method Template и заменяем содержимое на следующее:

/**
 * @param ${TYPE_HINT} $${PARAM_NAME}
 */
public ${STATIC} function set${NAME}(#if (${SCALAR_TYPE_HINT})${SCALAR_TYPE_HINT} #end$${PARAM_NAME})#if (${VOID_RETURN_TYPE}):void #end
{
#if (${STATIC} == "static")
    if ($${PARAM_NAME} !== null) {
        self::$${FIELD_NAME} = $${PARAM_NAME};
    }
#else
    if ($${PARAM_NAME} !== null) {
        $this->${FIELD_NAME} = $${PARAM_NAME};
    }
#end
}

Список встроенных переменных для шаблонов PhpStorm

PhpStorm предоставляет набор встроенных переменных, которые можно использовать в шаблонах для генерации геттеров и сеттеров:

  • NAME — Часть имени метода, без приставки get или set
  • TYPE_HINT — Тип данных свойства, который используется для возвращаемого значения или аргумента метода.
  • FIELD_NAME — Имя поля класса, к которому будет привязан геттер или сеттер.
  • PARAM_NAME — Имя параметра, передаваемого в метод сеттера (по умолчанию совпадает с именем поля).
  • RETURN_TYPE — Возвращаемый тип для метода геттера (аналог TYPE_HINT, но может быть указан более точно).

Список этих переменных может меняться от версии к версии, наиболее актуальную информацию можно увидеть прямо под окном редактирования шаблона:

Условная генерация кода в шаблонах PhpStorm

В PhpStorm можно применять условные выражения в шаблонах, что позволяет более гибко настраивать генерацию кода. Условные конструкции помогут, например, добавить дополнительный код только при наличии определенных условий. Для создания условий в шаблоне используется специальный синтаксис:

#if (${TYPE_HINT} == 'string')
    // Код для строки
#end

Пример выше приводит пример условной генерации кода, где определенный блок добавляется только в том случае, если тип переменной — string. Это позволяет реализовывать индивидуальные проверки для каждого типа данных.

Теперь вы можете адаптировать геттеры и сеттеры в PhpStorm под свои потребности и легко генерировать код, соответствующий стандартам вашего проекта.