binaryexp, maybe I wasn't clear in my explanation so lets see if this clears it up.
When you run a script (index.php) that is in your WebRoot (/usr/local/apache/htdocs) and it includes a class that is in an includes folder under your WebRoot (/usr/local/apache/htdocs/includes) you need to specify in the include line where to find that class:
<?php
// My index.php
include "includes/MyClass.php";
?>
That is all well and good the script that is currently running (index.php) knows that it has to look in a directory called includes that exists in it's current directory or in the search path defined in php.ini.
Now if your included class (MyClass.php) needs to include another class that exists in it's same directory (/usr/local/apache/htdocs/includes) you'd think that you could just name it. Unfortunatly that isn't correct since the script that is running will think that that include is in it's own directory. So you have to take that into consideration.
Here is what PHP sees as it's processing things:
// Main index.php script located in /usr/local/apache/htdocs
<?php
include "includes/MyClass.php";
?>
// MyClass.php script located in /usr/local/apache/htdocs/includes
<?php
include "AnotherClass.php";
?>
// As PHP Processes index.php this is what it does
<?php
inlcude "includes/MyClass.php";
?>
/*
Process include line (this replaces the include line with the file that is being included
*/
<?php
// include "includes/MyClass.php"; -- Replaced by lines below by PHP
<?php
include "AnotherClass.php";
?>
?>
/*
At this point PHP is still in the /usr/local/apache/htdocs directory, and when it trys to include AnotherClass.php it doesn't know where to find it.
*/
I hope this explination was more informative.