Metabor\Statemachine\Factory\TransitionSelector\ScoreTransition::selectTransition PHP Метод

selectTransition() публичный Метод

См. также: MetaborStd\Statemachine\Factory\TransitionSelectorInterface::selectTransition()
public selectTransition ( Traversable $transitions )
$transitions Traversable
    public function selectTransition(\Traversable $transitions)
    {
        $bestTransitions = array();
        $bestScore = -1;
        foreach ($transitions as $transition) {
            $score = $this->calculcateScore($transition);
            if ($score > $bestScore) {
                $bestScore = $score;
                $bestTransitions = array($transition);
            } elseif ($score == $bestScore) {
                $bestTransitions[] = $transition;
            }
        }
        return $this->innerSelector->selectTransition(new \ArrayIterator($bestTransitions));
    }

Usage Example

 /**
  *
  */
 public function testThrowsAnExceptionIfMoreThanOneTransitionIsInTheHighestLevel()
 {
     $targetState = new State('TargetState');
     $transitions = array();
     $transitions[] = new Transition($targetState);
     $transitions[] = new Transition($targetState);
     $selector = new ScoreTransition();
     $this->setExpectedException('\\RuntimeException');
     $selector->selectTransition(new \ArrayIterator($transitions));
 }