class Product
{
public $price = 100;
public $priceWithDiscount = 100;
/**
* @var DiscountCalculator
*/
protected $calc;
/**
* @param DiscountCalculator $calc
* @return $this
*/
public function setDiscountCalculator(DiscountCalculator $calc)
{
$this->calc = $calc;
return $this;
}
public function discountCalculate()
{
$this->calc->calculate($this);
return $this;
}
}
class DiscountCalculator
{
protected $discounts;
/**
* @param Discount $discount
* @return $this
*/
public function addCondition(Discount $discount)
{
$this->discounts[] = $discount;
return $this;
}
/**
* @param Product $product
*/
public function calculate(Product $product)
{
$discountsList = [];
/* @var $discount Discount */
foreach ($this->discounts as $discount) {
$discount->setProduct($product);
if ($discount->checkCondition()) {
$discountsList[] = $discount->getPercent();
}
}
if ($sum = array_sum($discountsList)) {
$product->priceWithDiscount =
$product->priceWithDiscount -
($product->priceWithDiscount / 100) * $sum;
}
}
}
abstract class Discount
{
protected $product;
protected $discount;
abstract public function checkCondition();
public function setProduct(Product $product)
{
$this->product = $product;
}
public function getPercent()
{
return $this->discount;
}
}
class SimpleDiscount extends Discount
{
// 5% скидка по этой акции
protected $discount = 5;
public function checkCondition()
{
return true;
}
}
class ByDateDiscount extends Discount
{
// 30% скидкапо этой акции
protected $discount = 30;
public function checkCondition()
{
// тут м не используем объект продукта для какой-то проверки,
// просто проверим дату, что это вторник этой недели
return new \DateTime() == (new DateTime('this week'))->add(new DateInterval('P1D'));
}
}
$calc = (new DiscountCalculator())
->addCondition(new ByDateDiscount());
$product = (new Product())
->setDiscountCalculator($calc);
// в любой момент можем добавить еще условие калькуляции
$calc->addCondition(new SimpleDiscount());
echo $product->discountCalculate()->priceWithDiscount;
Мне не важно, что он вводит не корректный адрес. Главное, чтобы он содержал только русские буквы и символыможно узнать, зачем это нужно все?
На данный момент в совершенстве знаю всю ленейку Adobe, php, java, pithon, c++.
- Здравствуйте, доктор ! У меня проблемы.
Доктор (пишет что-то в истории болезни):
- Присаживайтесь, голубчик... Рассказывайте.
- У меня... погасший взгляд... И дёргается правое плечо!
Доктор (продолжая писать):
- Валерьянка и две таблетки пофигина на ночь - и как рукой, как рукой...
- Ночами мне снится, что я строю подземные пирамиды в Тоскане. Меня страшно беспокоит сохранность фресок и поведение связующего раствора в контакте с грунтовыми водами...
Доктор (поднимает глаза):
- Что вы говорите! А чем армируете фундамент? Очень рекомендую скрученные по четыре калёные прутья - веками, знаете ли, обкатанный приём...
- Доктор , что-то идёт не так... На определителе телефоны людей, которые мне не звонили, все слова на вывесках и афишах, за которые цепляется взгляд - однокоренные...
Мой хомяк не разговаривает со мной четвёртый день, он неподвижно сидит в углу клетки и смотрит на меня взглядом барлога, целящегося в Гэндальфа кончиком бича...
- Какой, однако же, начитанный зверёк! Вы не пробовали давать ему русскую классику?
- Доктор , я чувствую и понимаю женщин ...
Доктор (роняя очки на стол, вполголоса):
- Оп-паньки...
Что сложного перенести логику из контроллера в сервис?зависит от конкретного контролера. Допустим, надо сделать вывод списка записей - тут легко - делаем сервис, оперирующий получением данных, зашиваем в него логику по сортировке из Request-a.
Вы бы тоже выбросили всякие endforeach, дебажить заманаешься потомтеперь перепешите пример со скобками вместо альтернативного синтаксиса и вы точно заманаетесь дебажить.
Начиная от коротких тэгов в примерахГде именно ты увидел там короткие теги? Тег <?php, ровно как и тег вывода на печать <?=?> - является неотъемлемой частью языка. Тег <?= доступен всегда, вне зависимости от настройки short_open_tag начиная c версии 5.4.
Разве макаки не знают, что XSS надо фильтровать ДО сохранения в БД?НИКОГДА ПЕРЕД СОХРАНЕНИЯ В БД не надо "ФИЛЬТРОВАТЬ" данные. Данные в базу идут в том виде, в котором они пришли от пользователя. Прогон данных через htmlspecialchars делается исключительно при выводе на html. Ибо разные форматы конечных документов могут иметь свои собственные требования к выводу тех или иных символов. И если в HTML нужно преобразовывать в мнемоники символы, использующиеся в HTML, это не значит, что это нужно делать для формата Word, PDF или чего-то еще.
Там еще много чего такогоЯ весь во внимании.
Роман насколько я помню хочет свалить в Канаду.Куда он свалит, у него импотека на самом старте. Не слышал я от него такого.
Как ты свою карьеру видишь в будущем?В такси работать на крайний случай, свое дело (не связанное с IT) - в идеале. Но явно не кодить. Я, если удастся, непременно потом сниму видео на эту тему.
чтобы свалить в нормальную страну ЕС?Это не ко мне вопрос, относительно релокейта. Я не могу говорить о том, о чем не знаю.
Короче, как ты оценишь идею переучиться в 30 лет на web-программиста, чтобы свалить в нормальную страну ЕС?Ну ты наверно мои мнения тут читал, я повторюсь, это будет мое личное мнение, не навязываю: в 30 поздно. Нужно много времени. Технологии очень сильно развились, нужно потратить много лет на обучение. Веб относительно легок, в нем куча людей вертится. Почему считаешь, что именно ты окажешься такой через чур востребованной единицей?