Задать вопрос

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

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

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

...

}


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

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


Так что же выбирать?
  • Вопрос задан
  • 208 просмотров
Подписаться 2 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 1
egor_nullptr
@egor_nullptr
Статическое свойство - самый слабый вариант, т.к. свойство можно "случайно" изменить.
Метод - самый гибкий вариант.
Константа - самый производительный вариант.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
trevoga_su
@trevoga_su
> Пишу DataMapper
Круто, дай посмотреть.

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

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

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

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽