That doesn't make sense calling function home() from home.php fails.
Maybe before banging your head at this particular problem for too long, I'll show you my trick and you can figure out if you want to use it or not.
Here's the code:
// print/call header here if desired
$function = '';
if(isset($_GET['Action']))
$function = 'Do_' . $_GET['Action'];
if(function_exists($function))
$function($_POST, $_GET);
else
Do_Default($_POST, $_GET);
// print/call footer here if desired
What ends up happening is you have a URL variable called Action declaring the function you wish to call. So for example, you have "Action=Home". To make "Home" work, you just setup a function like this:
function Do_Home($post, $get)
{
echo "I'm home";
} // end function Do_Home($post, $get)
You'll also need what I call a default function. A function that will get called when the user just called index.php OR they're trying to fiddle with your script.
function Do_Default($post, $get)
{
return Do_Home($post, $get); // kick it over to your home function
} // end function Do_Default($post, $get)
How you setup Home and Default is up to you.
Now you decide you want to add more functionality. You want to add Action=Search. In this case, all you do is setup another function called "Do_Search($post, $get)". The moment you set it up, its available.
What I've found works out well here is all you're doing is adding functions. Which is exactly what you end up doing with the switch, but with the switch, you have to add an additional case statement and do any additional juggling involved. The switch adventually grows out of control and then becomes difficult to manage. With the function trick, when you need to troubleshoot a section, you just check the Action= setting and then add "Do_" and there's your function call.
Now you don't have to use "Do_" as your prefix. You can create any prefix you like. Just don't take out the prefix otherwise crafty people might try putting in PHP's built in functions and those will get called instead. And as I noted above, if a function doesn't exist (or exist yet), the code will drop the user to the default function which will make it appear there was nothing wrong (of course, you can add an error if you wish).
To make this work with your current code, you'd just need to rename your functions and pull out your switch statement. Although my approach here has been to pile all the functions into one large PHP file. Usually my file sizes end up being around 20k up towards 70k. I also use templating so the HTML is not part of those counts.