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

Пишу 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.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
27 апр. 2024, в 13:49
300000 руб./за проект
27 апр. 2024, в 13:30
30000 руб./за проект
27 апр. 2024, в 13:22
600 руб./за проект