/** * @param int $variableType1 * @param int $variableType2 * @return int */ public static function stricterVariableType($variableType1, $variableType2) { $isVar1Array = FALSE; $var1ElementVariableType = $variableType1; switch ($variableType1) { case Variable::ARRAY_BOOL: case Variable::ARRAY_INT: case Variable::ARRAY_FLOAT: case Variable::ARRAY_STRING: $isVar1Array = TRUE; $var1ElementVariableType = Variable::arrayElementVariableType($variableType1); break; } $isVar2Array = FALSE; $var2ElementVariableType = $variableType2; switch ($variableType2) { case Variable::ARRAY_BOOL: case Variable::ARRAY_INT: case Variable::ARRAY_FLOAT: case Variable::ARRAY_STRING: $isVar2Array = TRUE; $var2ElementVariableType = Variable::arrayElementVariableType($variableType2); break; } if ($isVar1Array == $isVar2Array) { return $variableType1 > $variableType2 ? $variableType2 : $variableType1; } else { if ($isVar1Array && !$isVar2Array) { $stricterElementType = Variable::stricterVariableType($var1ElementVariableType, $variableType2); return Variable::arrayVariableTypeFromElement($stricterElementType); } else { $stricterElementType = Variable::stricterVariableType($variableType1, $var2ElementVariableType); return Variable::arrayVariableTypeFromElement($stricterElementType); } } }