php spl_自动加载_注册表帮助。。。只是不理解
我的类命名约定:class.ClassName.php 我的类文件命名约定:class.classname.php(因此是strtolower) 类文件位于包含路径:/home/content/XX/XXXXXX/html/projects/include中/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) { $
//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文件以调用自动加载文件删除
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可以位于完全不同的目录中。