/** * Property setter interceptor. * * @param string $property The property to set * @param string $value The property value * * @return mixed */ public function __set($property, $value) { if ($property == 'reason') { throw new HTTP_Response2_Exception('"reason" is a read-only property'); } parent::__set($property, $value); }
/** * Property getter interceptor to handle "uri" and "host" special cases. * * @param string $property The property to retrieve * * @return mixed */ public function __get($property) { switch ($property) { case 'uri': if ($this->_uri !== null) { return $this->_uri->getURL(); } return null; case 'proxy': return $this->_proxy; case 'path': if ($this->_uri === null) { return null; } if ($this->httpVersion == self::HTTP_VERSION_1_0 || $this->proxy) { // if http 1.0 or proxy given, the request uri must be absolute return $this->_uri->getURL(); } if (($path = $this->_uri->getPath()) === false) { $path = '/'; } if (($query = $this->_uri->getQuery()) !== false) { $path .= '?' . $query; } if (($fragment = $this->_uri->getFragment()) !== false) { $path .= '#' . $fragment; } return $path; case 'host': if (isset($this->headers['host'])) { return trim($this->headers['host']); } if ($this->_proxy !== null) { return $this->_proxy; } if ($this->_uri !== null) { $host = $this->_uri->getHost(); if (($port = $this->_uri->getPort()) !== false) { $host .= ':' . $port; } } return $host; case 'port': $port = $this->_uri->getPort(); if (!is_numeric($port)) { return $this->isSecure() ? 443 : 80; } return $port; case 'connection': if ($this->_connection === null) { include_once 'HTTP/Connection.php'; $this->_connection = HTTP_Connection::factory('Socket'); } return $this->_connection; default: return parent::__get($property); } }