0) { /* build error message */ $count = 0; $message = "Not allowed property '{$property}' via {$function}() {
\r\n";
foreach ($traces as $trace) {
if (isset($trace['file'])) {
$message .= " In {$trace['file']} at line {$trace['line']}\r\n";
$count++;
if ($count >= 5) { break; }
}
}
$message .= "}";
/* trigger! */
//trigger_error($message, E_USER_NOTICE);
}
}
public function __construct($data = array(), $properties = array()) {
/* set properties as set/get constraint */
$count = 0;
foreach ($properties as $name) {
$name = trim($name);
if ((!is_numeric($name)) && (strlen($name) > 0)) {
$this->_properties[] = $name;
$this->_data[$name] = null;
$count++;
}
}
if ($count > 0) { $this->_hasProperties = true; }
$this->push($data);
}
public function __set($name, $value) {
if ($this->_hasProperties) {
if (array_search($name, $this->_properties) === false) {
$this->notice('__set', $name);
} else {
$this->_data[$name] = $value;
}
} else {
$this->_data[$name] = $value;
}
}
public function __get($name) {
if ($this->_hasProperties && ($name == 'properties')) {
return $this->_properties;
}
if (array_key_exists($name, $this->_data)) {
return $this->_data[$name];
}
$this->notice('__get', $name);
return null;
}
public function extend($property, $data = null) {
if (!array_search($property, $this->_properties)) {
$this->_properties[] = $property;
$this->_data[$property] = $data;
$this->_hasProperties = true;
}
}
public function push($data) {
if (is_array($data)) {
if ($this->_hasProperties) {
foreach ($data as $name => $value) {
if (array_search($name, $this->_properties) === false) {
$this->notice('push', $name);
} else {
$this->_data[$name] = $value;
}
}
} else {
$this->_data = array_merge($this->_data, $data);
}
}
}
public function pull() {
return $this->_data;
}
}