anton_reut
@anton_reut
Начинающий веб-разработчик

Написал класс но он выглядит как обычная функция, это нормально?

В общем для своего проекта (доска объявлений) решил запилить функцию продвижения объявлений как в Авито - выведение в топ. Для этого в таблице items добавляю два дополнительных поля к объявлению:
- promotion (может иметь значения 0 или 1)
- promotion_time (время продвижения, например 7 дней, задаем путем отсчета от текущего unix-времени + 604800 секунд, при проверке сверяем текущее время и записанное в базе)

И тут при выводе массива объявлений, для проверки продвигается ли объявление решил не пихать все проверки в свой процедурный код, а написал класс Promoter, который будет проверять является ли объявление продвигаемым и не истек ли период продвижения:

class Promoter {
	
	private $item_id;
	
	public function __construct($item_id){
		
		$this->item_id = $item_id;
		// $this->item_id будем дальше использовать при запросе в базу в методе checkPromotion().
	}
	
	public function checkPromotion(){
		
		// Проверяем у item поле в базе, 0 или 1
		// Если после первой проверки значение 1 -> Проверяем дату продвижения, 
		// если срок продвижения истек то записываем в поле БД "0" и возвращаем "0", если нет то возвращаем "1"
		
		return $period == true ? 1 : 0;
	}
	
}

$checkPromotion = new Promoter(1);
echo $checkPromotion->checkPromotion();


И тут весь юмор в том что у меня в этом классе всего одна функция ) Стоит ли ради этого городить такой огород?
P.S. Не судите строго за синтаксис и конструкцию, только постигаю ООП )
  • Вопрос задан
  • 669 просмотров
Решения вопроса 1
myks92
@myks92
Нашёл решение — пометь вопрос ответом!
Отдельные классы это хорошая практика. Однако, саму проверку стоит размещать там, где она используется. В вашем случае это сделано не совсем а равильно. Проверку нужно поместить в класс, объявления, но при этом ссылаться на проверку класса промо.

Будет примерно так:
public function getPromotion(): ?Promotion
{
     return new Promotion($this->promotion_id, $this->promotion_time);
}


Далее помещаем метод проверки:
public function isPromoted(): bool
{
     return $this—>getPromotion()->isPromoted()
}


Если у вас данные для метода могут быть пустыми, тогда условие может выглядеть так
public function isPromoted(): bool
{
     return $this->getPromotion() ? $this—>getPromotion()->isPromoted() : false
}


Не претендую ни на что) Я делаю так) Создавать дополнительные классы это хорошо. Можно даже создать отдельный класс для Id. В типизации будет удобно работать. И понятно всем. Да и в целом не будет все в одном классе.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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