PHP function __autoload($class_name) how to Load two class path directories

  softwareengineering

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..

1

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

0

I solve the problem spl_autoload_register function two times.

below is the code for reference.

spl_autoload_register('load_api');
spl_autoload_register('load_lib');

function load_api($class){
    if(!file_exists(CLASS_LIB."/".$class. '.class.php') )
        return false;
    require_once( CLASS_LIB."/".$class. '.class.php');
    return true;
}
function load_lib($class){
    if( !file_exists(DOC_ROOT."/libs/Smarty.class.php") )
        return false;
    require_once(DOC_ROOT."/libs/Smarty.class.php");
    return true;
}

Theme wordpress giá rẻ Theme wordpress giá rẻ Thiết kế website Kho Theme wordpress Kho Theme WP Theme WP

LEAVE A COMMENT