У меня есть модель, где я получаю общее количество заказов, как это:
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();
,
Есть ли шанс, что я смогу заставить это работать?
Создать итоговое значение как дисперсию экземпляра
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
Вам просто нужно сохранить свой $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()