function hoge($foo) {
$mes;
  if ($foo == 0) {
    $mes = "fooは0";
    return $mes;
  } else {
    return true;
  }
}

として、
if(hoge(0) == true) {
  echo "trueが返されました";
} else {
  echo hoge(0);
}

とすると、$mesが返ってくるはずなのにtrueで処理されてしまいます。
これはどうしてなんでしょうか?

return true;のところをfalseにして、if(hoge(0) == true) {のところもfalseにすると
期待通りの動作になるのですが、なんかおかしい気がして・・・
違和感のない書き方をするとなるとどうすればいいのでしょうか?

それともう1つ質問なのですが、String型とBoolean型の2種類を条件によって返してますが、
こういうことはしてもいいのでしょうか?
JavaやCあたりは、は関数(メソッド)に返り値を型宣言しないといけないみたいなので
そのへんがきになります。