2

我的班级命名约定:class.ClassName.php

我的类文件命名约定:class.classname.php(因此是strtolower)。

类文件位于包含路径:/home/content/XX/XXXXXX/html/projects/include/

//autoload.php
<?php
    class Autoload {
        public static function autoloadClasses($className) {
            $className = strtolower($className);
            $file = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'include/class.' . $className. '.php';
            require_once($file);
        }
    }
    $register = spl_autoload_register('Autoload::autoloadClasses');
?>

//check4.php
<?php
    $company = $s->company;
    $projectName = 'development';
    $items = array('type', 'scope', 'table', 'conditions');
    $things = array('select', '*', 'todos', array('company'=>$company, PROJECT_NAME=>$projectName));
    $combinedArray = array_combine($items, $things);
    $q = new Query($combinedArray);
?>

已验证的类存在并包含在 http://technicheian.com/images/includedClasses.png

在每个使用类的页面上(例如,这个调用 Query;位于 class.query.php:

05-Nov-2011 20:18:30]PHP Fatal error: Class 'Query' not found in /home/content/XX/XXXXXX/html/projects/check4.php在第 9 行

在 class.session.php 的末尾是$s = new Session(这里注意说 $company 变量不应该为空)。

我已经阅读了几乎所有我能找到的文章、操作方法等。我错过了什么?

运行 php 5.2

4

1 回答 1

1

删除file_exists检查并查看您的错误日志。您将看到您尝试要求的文件。我认为它可能会混淆什么__FILE__(因为它正在处理 autoload.php 文件)。

编辑:看起来像这样

dirname(__FILE__) . DIRECTORY_SEPARATOR . 'include/class.'

应该改为

/home/content/XX/XXXXXX/html/projects/include/class.

您需要检查许多事项以确保自动加载正常工作:

  1. 要使您的自定义自动加载处于活动状态,必须对其进行注册。所以spl_autoload_register('Autoload::autoloadClasses')必须执行。这样做的一个好方法是编辑 php.ini 并设置 auto_prepend 文件来调用您的自动加载文件。
  2. 然后,您的自动加载代码必须找到具有正确扩展名的正确文件(可能尊重您想要的 php include_path 优先级)。
于 2011-11-06T02:50:11.900 回答