string); $trace = debug_backtrace(); trigger_error( 'Undefined property via __get(): ' . $name . ' in ' . $trace[0]['file'] . ' on line ' . $trace[0]['line'], E_USER_NOTICE); return null; } public function __isset ( string $name ) : bool { if($name === 'length') return true; return false; } public function __debugInfo() : array { return [ 'length' => $this->length, 'string' => $this->string ]; } public function addCharsAt(int $index, string $chars) { if(strlen($chars) === 0 || $index < 0 || $index > 1 + $this->length) return null; $str=''; $len = $this->length; for ($i = 0; $i <= $len;) { if ($i === $index) { $str .= $chars; $index = -1; //$this->length += strlen($chars); } elseif ($i < $len) { $str .= $this->string[$i]; $i++; } else break; } $this->string=$str; return null; } } $foo = new Foo(); $foo->addCharsAt(0, "test"); var_dump($foo); $foo->addCharsAt(2, "xx"); var_dump($foo); $foo->addCharsAt(6, "yy"); var_dump($foo);