PHP Autoload – How to Load Two Class Path Directories with __autoload()

PHP

I am using following function to autoload classes, it works fine if i am using only one directory called 'classes' however when i try to use Smarty lib also it fails and give me the error

Fatal error: Class 'Database' not found in /home/...

for ex:

require_once(DOC_ROOT."/libs/Smarty.class.php");
function __autoload($class_name) {   
    require_once( CLASS_LIB."/".$class_name . '.class.php');
}
$db = new Database();
$session=new Session();
$smarty = new Smarty();

but if i do this it give me the error unable to load the smarty class..

function __autoload($class_name) {   
    require_once( CLASS_LIB."/".$class_name . '.class.php');
    require_once(DOC_ROOT."/libs/Smarty.class.php");
}

$db = new Database();
$session=new Session();
$smarty = new Smarty();

Warning: require_once(/home/.../classes/Smarty_Internal_TemplateCompilerBase.class.php) [function.require-once]: failed to open stream: No such file or directory in /home/.../includes/init.php 

Any idea what i am i doing wrong here ? i need to be able to load classes directory automatically but needs to make sure i dont loose smarty path too..

Best Answer

Several solutions come to mind.

  • Use include_once instead of require_once to avoid the error.
  • Check for the existence of the file before doing the require_once.
  • Put in an if statement detects Smarty and special cases the code.
  • Just include the Smarty classes manually.
  • (Best) Use spl_autoload_register twice, once for your classes and once for the Smarty classes. __autoload is deprecated. Spl_autoload_register should handle the problem. http://php.net/manual/en/language.oop5.autoload.php
Related Topic