php spl_autoload_register帮助...只是不理解

时间:2011-11-06 01:22:22

标签: php spl-autoload-register

我的类命名约定: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);
?>

verified classes exist and are included http://technicheian.com/images/includedClasses.png

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

第9行

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

class.session.php末尾的

$s = new Session(这里注明$ company变量不应为空)。

我几乎读过每篇文章,操作方法等等。我错过了什么?

运行php 5.2

1 个答案:

答案 0 :(得分: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优先级)。