Статическое свойство или константа?

Пишу DataMapper, у реализаций прописываются строки для инсёрта и селекта. Кроме того, у каждого маппера прописан целевой класс. Например:

class TaskMapper extends Mapper
{
    const TARGET_CLASS = "Task";
    protected static $find = "SELECT * FROM %s WHERE %s = ?";

...

}


Вопрос - эти два значения лучше сделать статическими свойствами, или константами? По какому принципу вообще делать выбор между двумя этими вариантами?
И есть еще третий вариант - метод:

public function getTargetClass()
{
    return 'Task';
}


Так что же выбирать?
  • Вопрос задан
  • 202 просмотра
Решения вопроса 1
egor_nullptr
@egor_nullptr
Статическое свойство - самый слабый вариант, т.к. свойство можно "случайно" изменить.
Метод - самый гибкий вариант.
Константа - самый производительный вариант.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
trevoga_su
@trevoga_su
> Пишу DataMapper
Круто, дай посмотреть.

Я сам писал DataMapper и скажу тебе, что имя таблицы/класса все-же нужно НЕ делать статиком.
Почему? Ну хотя бы потому, что разно или поздно тебе потребуется один из твоих мапперов наследовать, что бы его методы были применены к другой таблице. Ты добавишь модель ExtendedTask и маппер ExtendedTaskMapper.

Я не помню на память, что будет, если ты в ExtendedTaskMapper объявишь константу, которая уже есть в TaskMapper.. возможно будет ошибка. Но в любом случае константы - не для твоего случая. Имя таблицы/класса в маппере я бы не делал константами.

Самый оптимальный выход - это иметь метод getTargetClass. И это.. подумай над тем, что бы твой маппер сам бы определял Target.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы