public function answer(KnowledgeState $state) { $state_value = $state->value($this->name); foreach ($this->answers as $answer) { $answer_value = $answer->value; // If this is the default option, return it always. if ($answer_value === null) { return $answer; } // If the value is a variable, try to resolve it. if (KnowledgeState::is_variable($answer_value)) { $answer_value = $state->resolve($answer_value); } if ($state_value == $answer_value) { return $answer; } } // We didn't find an appropriate answer :O return null; }