code: public function next()
      {
          if (!$this->hasNext()) {
              return null;
          }
          
          $first = substr($this->text, $this->index, 1);
          $byte  = ord($first);
          
          // ASCII の範囲の文字はそのまま返します
          if ($byte < 128) {
              $this->index++;
              return $byte;
          }
          
          // ビットが 10xxxxxx または 1111111* の文字は NG なのでスキップして次の文字に進みます
          if ($byte < 192 || 254 <= $byte) {
              $this->index++;
              return $this->next();
          }
          
          return $this->nextMultibyteChar($byte);
      }
docs: index を 1 進めると同時に次の文字を返します.
  次の index が存在しない場合は null を返します.
  
  @return int 現在の文字の Unicode 符号点