__autoload未在PHP中执行

时间:2011-08-08 23:30:07

标签: php autoload

所以我试图在PHP中自动加载类;但是,__autoload()函数似乎没有执行。即使我尝试echo $class_name变量,除了我在下面提供的输出之外,我什么都看不到。我已经包含了所有相关文件,并删除了它的不相关部分。根据{{​​3}}中的说明,我无法在CLI PHP: Autoloading Classes - Manual中使用__autoload(),我没有使用它。任何指针都将非常感激。感谢。

index.php的输出:

致命错误 /home1/tylercro/public_html/cb-test/index.php 3 中未找到班级“日历” >

的index.php:

<?php
    require_once($_SERVER['INCLUDES'] . 'prep.php');
    $smarty -> assign('calendar', new Calendar());
?>

prep.php:

<?php
    error_reporting(-1);

    function __autoload($class_name) {
        include($_SERVER['CLASSES'] . $class_name . '.php');
    }
    require_once($_SERVER['SMARTY_BIN'] . 'Smarty.class.php');

    $smarty = new Smarty();
?>

htaccess的:

Options -Indexes

SetEnv CLASSES /home1/tylercro/public_html/cb-test/includes/classes/
SetEnv INCLUDES /home1/tylercro/public_html/cb-test/includes/
SetEnv SMARTY_BIN /home1/tylercro/smarty/

2 个答案:

答案 0 :(得分:4)

Smarty有自己的自动加载功能,它与你的碰撞。 spl_autoload_register()可以解决您的问题,因为它可以将任何功能注册为自动加载器。

答案 1 :(得分:4)

post解决了我的问题。我所要做的就是将 prep.php 更改为以下内容:

<?php
    error_reporting(-1);

    function __autoload($class_name) {
        include($_SERVER['CLASSES'] . $class_name . '.php');
    }
    define('SMARTY_SPL_AUTOLOAD',1);
    require_once($_SERVER['SMARTY_BIN'] . 'Smarty.class.php');
    spl_autoload_register('__autoload');

    $smarty = new Smarty();
?>