public function doKnowUpdate(WordsEntity $word) { // invalid setting if ($word->getStatus() != $this->marker->getStatus()) { throw new EngRuntimeException("status doesn't match!"); } $newSuccessCount = $word->getSuccess() + 1; if ($newSuccessCount >= $this->marker->getSuccess()) { $newStatus = $this->getNextStatusWhenSuccess($word->getStatus()); if ($newStatus != $word->getStatus()) { $word->setStatus($newStatus); $word->setSuccess(0); $word->setFailure(0); } else { $word->setSuccess($newSuccessCount); } } else { $word->setSuccess($newSuccessCount); } }