Как связать метод с текущим состоянием модели?

У меня есть модель, где я получаю общее количество заказов, как это:

public function total()
{
$total = $this->subtotal();
foreach ($this->lineItems as $l) {
$total += $l->amount;
}
return $total;
}

Я хочу добавить метод formated() который будет форматировать subtotal а также total метод возвращается с функцией number_format($numberHere, 2),

Я хочу, чтобы это было динамически, а не как: totalFormated или же subtotalFormated, Я хочу вывести форматированное значение так: $order->total()->formated();,

Есть ли шанс, что я смогу заставить это работать?

0

Решение

Создать итоговое значение как дисперсию экземпляра

protected $total;

затем измените свою функцию на эту

public function total()
{
$this->total = $this->subtotal();
foreach ($this->lineItems as $l) {
$this->total += $l->amount;
}

return $this;
}

затем создайте форматированную функцию

public function formated()
{
return number_format($this->total, 2)
}

Теперь вы можете связать функцию как

$order->total()->formated()

** обновленный **

вы можете вернуть итоговые и промежуточные итоги в форматированной функции

public function formated()
{
return [
"total" => number_format($this->total, 2),
"subtotal" => number_format($this->subtotal, 2)
];
}

** или же **

Вы можете использовать одну переменную экземпляра как для итога, так и для промежуточного итога. давай назовем эту переменную myTotals

protected $myTotals;

public function total()
{
$this->myTotals = $this->subtotal();
foreach ($this->lineItems as $l) {
$this->myTotals += $l->amount;
}

return $this;
}public function subTotal()
{
$this->myTotals = $this->subtotal();
foreach ($this->lineItems as $l) {
$this->myTotals += $l->amount;
}

return $this;
}

public function formated()
{
return number_format($this->myTotals, 2)
}

так что в этом случае вы можете позвонить

$order->total()->formated() // and this will return the total
$order->subTotal()->formated() // and this will return the subtotal
2

Другие решения

Вам просто нужно сохранить свой $total как собственность ($this->total += $l->amount) и в конце вашего total() метод возвращает текущий экземпляр вашего класса = $ this-, в принципе:

public function total()
{
$this->total = $this->subtotal();
foreach ($this->lineItems as $l) {
$this->total += $l->amount;
}

return $this;
}

Теперь ваш метод возвращает экземпляр Учебный класс сам, так что вы можете вызвать другой метод (или что-нибудь еще в этом классе):

public function format()
{
return number_format($this->total, 2);
}

И с этим вы должны быть в состоянии «связать» свои методы. Ключ должен вернуть пример.

$order->total()->formated()

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector