original_string: public function substring($start, $length = null){
  		
  		if(!$this->offsetExists($start)){
  			throw new \OutOfRangeException('$start is an invalid index');
  		}
  		
  		if($length !== null && !\is_numeric($length) || $length < 0){
  			throw new \InvalidArgumentException('$length is invalid');
  		}
  		
  		return new static(\mb_substr($this->_Value, $start, $length, $this->_Encoding),
  				$this->_Encoding);
  		
  	}
code: public function substring($start, $length = null){
  		
  		if(!$this->offsetExists($start)){
  			throw new \OutOfRangeException('$start is an invalid index');
  		}
  		
  		if($length !== null && !\is_numeric($length) || $length < 0){
  			throw new \InvalidArgumentException('$length is invalid');
  		}
  		
  		return new static(\mb_substr($this->_Value, $start, $length, $this->_Encoding),
  				$this->_Encoding);
  		
  	}
code_tokens: public function substring ( $ start , $ length = null ) { if ( ! $ this -> offsetExists ( $ start ) ) { throw new \ OutOfRangeException ( '$start is an invalid index' ) ; } if ( $ length !== null && ! \ is_numeric ( $ length ) || $ length < 0 ) { throw new \ InvalidArgumentException ( '$length is invalid' ) ; } return new static ( \ mb_substr ( $ this -> _Value , $ start , $ length , $ this -> _Encoding ) , $ this -> _Encoding ) ; }
docstring: Returns a new string as a substring from the current one
  @param int $start where to start extracting
  @param int $length how many characters to extract
  @return \static
docstring_tokens: Returns a new string as a substring from the current one