I would go with returning an associative array with two elements:
return array('result' => true, 'message' => 'The operation executed fine!')
or
return array('result' => false, 'message' => 'The operation failed because...')
This way client code would access the values this way:
$retval = do_something();
if($retval['result']){
//...
}
else{
echo 'Ooups: ', $retval['message'];
}
Or, if you need these result values throughout many modules of your code I would go with approach #2 "Return a Result object", because by using this approach the data is more encapsulated.
Personal opinion: I definitely wouldn't use references in PHP, I just don't feel them in this language.