_container = $container; $this->_value = (string)$value; /** * Object is marked as just modified by memory manager * So we don't need to trace followed object modifications and * object is processed (and marked as traced) when another * memory object is modified. * * It reduces overall numberr of calls necessary to modification trace */ $this->_trace = false; } /** * ArrayAccess interface method * returns true if string offset exists * * @param integer $offset * @return boolean */ public function offsetExists($offset) { return $offset >= 0 && $offset < strlen($this->_value); } /** * ArrayAccess interface method * Get character at $offset position * * @param integer $offset * @return string */ public function offsetGet($offset) { return $this->_value[$offset]; } /** * ArrayAccess interface method * Set character at $offset position * * @param integer $offset * @param string $char */ public function offsetSet($offset, $char) { $this->_value[$offset] = $char; if ($this->_trace) { $this->_trace = false; $this->_container->processUpdate(); } } /** * ArrayAccess interface method * Unset character at $offset position * * @param integer $offset */ public function offsetUnset($offset) { unset($this->_value[$offset]); if ($this->_trace) { $this->_trace = false; $this->_container->processUpdate(); } } /** * To string conversion * * @return string */ public function __toString() { return $this->_value; } /** * Get string value reference * * _Must_ be used for value access before PHP v 5.2 * or _may_ be used for performance considerations * * @internal * @return string */ public function &getRef() { return $this->_value; } /** * Start modifications trace * * _Must_ be used for value access before PHP v 5.2 * or _may_ be used for performance considerations * * @internal */ public function startTrace() { $this->_trace = true; } }