Better way to have output code?
I recommend splitting your model (the database operation) from your view (the localization of your message).

Depending if you prefer a return code or a exception flow your code could look like:

public function create()
{
    if($this-&gt;user_exists) return ""; //do you really want to show nothing?
    $error=UserModel::create($this-&gt;password,$salt,$this-&gt;username); // don't have to be static! It's up to you.
    if ($error==-1) return "User could not be created";  //could be a constant UserModel::ERROR_GENERAL
    if ($error==0) return "Username already exists"; //UserModel::ERROR_EXISTS
    return "User has been created";
}


Translating this to exception is up to the reader :)

Actually I even would prefer to give the $error code to my template and let it handle the localization:

public function create()
{
    if($this-&gt;user_exists) return "";
    $error=UserModel::create($this-&gt;password,$salt,$this-&gt;username); 
    $view=new View("templatefile.php");
    $view-&gt;assign('error',$error);
    return $view-&gt;render();
}

//"templatefile.php"
&lt;?if ($error==1):?&gt;...
&lt;?elseif ($error==0):?&gt;...
&lt;?else:?&gt;...
&lt;?endif?&gt;