__autoload($ class)不工作?找不到类错误

gan*_*jan 5 php class object autoload

我正在PRO PHP AND JQUERY阅读本书中的一些例子,但由于某种原因,这些例子不起作用.即使我从书籍网站下载的示例也不起作用.不确定什么是错的,因为我完全按照书中所做的那样做.

/public/Index.php

include_once '../sys/core/init.inc.php';
$cal = new Calendar($dbo, "2010-01-01 12:00:00"); //ERROR Class 'Calendar' not found
Run Code Online (Sandbox Code Playgroud)

/sys/core/init.inc.php

    function __autoload($class)
    {
        $filename = "../sys/class/class." . $class . ".inc.php";
        if ( file_exists($filename) )
        {
            include_once $filename;
        }
    }
Run Code Online (Sandbox Code Playgroud)

/sys/class/class.calendar.inc.php

class Calendar extends DB_Connect
{
    private $_useDate;
    private $_m;
    private $_y;
    private $_daysInMonth;
    private $_startDay;

    /**
     * Create a database containg relevant info
     *
     * @param object $dbo a database object
     * @param string $useDate the date to build calender
     */

    public function __construct($dbo=NULL, $useDate=NULL)
    {
        /*
         * Call the parent constructor to check db object 
         */
        parent::__construct($dbo); 
    }


}
Run Code Online (Sandbox Code Playgroud)

这非常令人讨厌,因为书中的每一章都建立在这个简单的基础之上.我的猜测是__autoload()问题,但我不知道..

ale*_*lex 3

文件路径未指向正确的位置。

更好的主意是这样的Index.php......

define('DOCROOT', dirname(__FILE__));
Run Code Online (Sandbox Code Playgroud)

...然后像__autoload()这样修改你的...

function __autoload($class)
{
    $filename = DOCROOT . "/sys/class/class." . strtolower($class) . ".inc.php";
    if ( file_exists($filename) )
    {
        include_once $filename;
    }
}
Run Code Online (Sandbox Code Playgroud)

您应该strotlower()在包含它之前先输入文件名,因为您的类是Calendar但您的文件名具有calendar.