Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/238.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php spl_自动加载_注册表帮助。。。只是不理解_Php_Spl Autoload Register - Fatal编程技术网

php spl_自动加载_注册表帮助。。。只是不理解

php spl_自动加载_注册表帮助。。。只是不理解,php,spl-autoload-register,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) { $

我的类命名约定: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);
?>
//autoload.php
//check4.php

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

PHP致命错误:在第9行的/home/content/XX/XXXXXX/html/projects/check4.PHP中找不到类“Query”

在class.session.php的末尾是
$s=new session
(此处指出$company变量不应为空)

我几乎读过每一篇文章,我能找到的操作方法等等。我遗漏了什么


运行PHP5.2

删除
文件\u存在
检查并查看您的错误日志。您将看到您试图要求的文件。我认为可能会混淆
\u文件\uuuuuu
的功能(因为它正在处理autoload.php文件)

编辑:看起来像这样

dirname(\uuuuu文件)。目录\u分隔符。“include/class”。

应改为

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

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

  • 要激活自定义自动加载,必须对其进行注册。因此必须执行
    spl\u autoload\u register('autoload::autoloadClasses')
    。这样做的一个好方法是编辑php.ini并设置auto\u prepend文件以调用自动加载文件
  • 然后,您的自动加载代码必须找到具有正确扩展名的正确文件(可能考虑您想要的php include_路径优先级)

  • 删除
    set\u include\u path
    位-您没有在这里使用它。另外,您是否检查了文件
    {AutoloaderClassDir}/include/class.{ClassName}.php
    中是否存在您的类,并考虑了大写名称?谢谢您的回复。更新了我的代码(和帖子)。通常,这些类型的更改并不复杂,也不难实现。但是,我几乎编辑了所有关于此功能可用性的代码。我在研究过程中阅读的所有内容都使其看起来只是一个微不足道的实现(“您只需添加这段代码,您就很好”).Autoloader有点像路由器,我的大多数应用程序(显然)在没有访问类的情况下中断。为什么人们不断地重新发明轮子?看看Zend_Loader_Autoloader()@DigitalPrecision:这是否意味着我必须将我的整个应用程序“移植”到Zend Framework?或者,我可以仅仅利用这个“轮子”?(对不起,可能是个愚蠢的问题)这不是一个愚蠢的问题,Zend_Framework可以用作一个独立的供应商库,您可以从中构建,而无需使用控制器等。是的,很好的捕获。作为一种替代方法,如果操作正确,可以留在代码中。失败时,记录您试图打开的文件名。@Paul:thx。更新帖子以反映更改。错误日志输出与浏览器错误输出:2011年11月5日20:18:30]PHP致命错误:在Class.session.PHP末尾第9行的/home/content/XX/XXXXXX/html/projects/check4.PHP中找不到类“Query”。PHP是$s=new session;check4.PHP上的代码:@tchnchn错误日志中的消息路径名中没有“include”。另外,您确定自动加载程序正在运行吗运行。你可以在里面放一个echo语句来检查。@Paul:谢谢你在这一点上和我一起讨论。我显然不明白这是怎么回事。Autoloader肯定没有运行。放一个echo语句…nada。这就是我的知识差距。这个函数需要在调用类/对象的每个页面顶部放两个b吗?我试过了,但它不正确aid我无法重新定义它。另外,re:msg not having/include/…错误消息调用文件是否需要与类include位于同一目录中的2 b?最后,我得到了我的autoloader类文件在文件结构中的位置高于类,所以…/html/project/autoloader.php。@tchnchn别担心,我希望你能解决它。我在响应中编辑了第1点介绍了如何将它放在每个页面的顶部(使用/etc/php.ini)。调用文件、include文件和autoloader可以位于完全不同的目录中。