public function slice($start, $end = null)
{
if ($end === null) {
$length = $this->length();
} elseif ($end >= 0 && $end <= $start) {
return static::create('', $this->encoding);
} elseif ($end < 0) {
$length = $this->length() + $end - $start;
} else {
$length = $end - $start;
}
$str = \mb_substr($this->str, $start, $length, $this->encoding);
return static::create($str, $this->encoding);
}