public static function set($_this, $name, $value)
{
$class = get_class($_this);
$uname = ucfirst($name);
$methods =& self::getMethods($class);
if ($name === '') {
throw new MemberAccessException("Cannot write to a class '{$class}' property without name.");
} elseif (self::hasProperty($class, $name)) {
// unsetted property
$_this->{$name} = $value;
} elseif (isset($methods[$m = 'set' . $uname])) {
// property setter
$_this->{$m}($value);
} elseif (isset($methods['get' . $uname]) || isset($methods['is' . $uname])) {
// property setter
throw new MemberAccessException("Cannot write to a read-only property {$class}::\${$name}.");
} else {
self::strictSet($class, $name);
}
}