IteratorAggregateインターフェースの例 : PHP

Pocket

IteratorAggregateを実装することで、自身のプロパティを外部イテレータとして提供できる。

<?php

class TimecardCollection implements IteratorAggregate
{
    private $timeCards;
    private $rate;
    public function __construct($rate, $timeCards)
    {
        $this->rate = $rate;
        $this->timeCards = $timeCards;
    }

    public function getIterator()
    {
        return new ArrayIterator($this->timeCards);
    }

    public function calculatePay()
    {
       $hours = array_reduce($this->timeCards, function($carry, $item) {
           return $carry + $item;
       }, 0); 
       return $this->rate * $hours;
    }
}
$timeCardCollection = new TimeCardCollection(1250,
    ['mon' => 8, 'tue' => 8.5, 'wed' => '8.25', 'thu' => 8.25, 'fri' => 8]);

foreach($timeCardCollection as $key => $value) {
    echo $key . ': ' . $value . PHP_EOL;
}

$payment = $timeCardCollection->calculatePay();
echo $payment;
mon: 8
tue: 8.5
wed: 8.25
thu: 8.25
fri: 8
51250

コメント

No comments yet.

コメントの投稿

改行と段落タグは自動で挿入されます。
メールアドレスは表示されません。