Эмпирическое правило для выбора между stati c и экземпляром:
Если вы на 100% уверены, что не хотите, чтобы ваша функция / свойство велось полиморфно, тогда stati c будет хорошо подходит. Например, функция, которая возвращает значение PI (3.14), может иметь значение stati c, поскольку она будет универсальной константой stati c.
Метод / свойство экземпляра может быть переопределено и может вести себя полиморфно (может изменить поведение во время выполнения). Если вы хотите переопределить поведение, тогда stati c не поможет, потому что метод stati c не может переопределить, так как имя указывает, что это stati c. Пример: скажем, вы хотите создать функцию, которая рассчитывает зарплату сотрудников в организации. Зависит от назначения сотрудника расчет зарплаты будет варьироваться. В этом случае вы не можете использовать функцию stati c, потому что расчет зарплаты зависит от объекта.
В вашем примере проверка электронной почты может быть stati c, поскольку независимо от объекта проверка будет Стати c. Один улов здесь - модульный тест, который вы пишете для родителя, всегда будет вызывать проверку, так как вы не можете смоделировать stati c.
Если вы не уверены, что ваша функция / свойство ведет себя полиморфно, то всегда go для Метод экземпляра / свойство. Только go для статуса c, если вы полностью уверены в этом.