src/JsPhpize/Compiler/Helpers/Set.h
function ($base, $key, $operator, $value) {
switch ($operator) {
case '=':
if (is_array($base)) {
$base[$key] = $value;
break;
}
if (is_object($base) && method_exists($base, $method = "set" . ucfirst($key))) {
$base->$method($value);
break;
}
$base->$key = $value;
break;
case '+=':
if (is_array($base)) {
if ((isset($base[$key]) && is_string($base[$key])) || is_string($value)) {
$base[$key] .= $value;
break;
}
$base[$key] += $value;
break;
}
if ((isset($base->$key) && is_string($base->$key)) || is_string($value)) {
$base->$key .= $value;
break;
}
$base->$key += $value;
break;
case '-=':
if (is_array($base)) {
$base[$key] -= $value;
break;
}
$base->$key -= $value;
break;
case '*=':
if (is_array($base)) {
$base[$key] *= $value;
break;
}
$base->$key *= $value;
break;
case '/=':
if (is_array($base)) {
$base[$key] /= $value;
break;
}
$base->$key /= $value;
break;
case '%=':
if (is_array($base)) {
$base[$key] %= $value;
break;
}
$base->$key %= $value;
break;
case '|=':
if (is_array($base)) {
$base[$key] |= $value;
break;
}
$base->$key |= $value;
break;
case '&=':
if (is_array($base)) {
$base[$key] &= $value;
break;
}
$base->$key &= $value;
break;
case '&&=':
if (is_array($base)) {
$base[$key] = $base[$key] ? $value : $base[$key];
break;
}
$base->$key = $base->$key ? $value : $base->$key;
break;
case '||=':
if (is_array($base)) {
$base[$key] = $base[$key] ? $base[$key] : $value;
break;
}
$base->$key = $base->$key ? $base->$key : $value;
break;
}
return $base;
}