1

我目前正在使用 PHP 制作我的第一个网站。我希望创建一个具有一般自动加载能力的文件,而不是为每个单独的页面编写自动加载。

这是我的autoloadControl.php

// nullify any existing autoloads
spl_autoload_register(null,false);

//specify extensions that may be loaded
spl_autoload_extensions('.php. .class.php');

function regularLoader($className){
    $file = $className.'.php';
    include $file;
}

//register the loader function
spl_autoload_register('regularLoader');

这是我的index.php文件:

require("header.php");
require("autoloadControl.php");

$dbConnection = new dbControl();
$row=$dbConnection->getLatestEntry();

目前,这$dbConnection = new dbControl()给了我以下错误:

致命错误:类 'dbControl'

所以我的问题是,有没有办法以这种方式使用自动加载,或者我必须将它放在我编写的每个使用另一个文件的 PHP 文件的顶部?

4

2 回答 2

0

您的问题与您在哪里定义回调无关,而是与如何定义回调有关。

Usingspl_autoload_extensions('.php')将实现与您的自定义回调相同的功能;如果您的回调如此简单,则不需要两者。您的评论也是错误的 -spl_autoload_register不带参数调用不会清除当前回调,但它会注册默认回调。

但是,在您的代码中,您spl_autoload_extensions错误地指定了参数 - 它应该是一个逗号分隔的扩展列表。所以我认为你想要的是这样的:

// Tell default autoloader to look for class_name.php and class_name.class.php
spl_autoload_extensions('.php,.class.php')
// Register default autoloader
spl_autoload_register();
// READY!

这与您的代码的主要区别是默认自动加载器将查找“dbcontrol.php”(全部小写),而您的将查找“dbControl.php”(如 PHP 代码中所述)。无论哪种方式,你当然不需要两者。

于 2012-08-08T17:05:09.677 回答
0

放置spl_autoload在外部文件中既有效又是一种使代码更易于维护的良好做法——在一个地方更改可能是 10、20 或更多。

dbControl您提供的代码中似乎没有提供您的课程。假设您在引用它之前包含了该类,并且该类正常工作,那么您完成此任务应该没有问题。

require("header.php"); 
require("autoloadControl.php");  
$dbConnection = new dbControl(); // Where is this class located?

这是您的autoloadControl.php文件的 OOP 方法:

<?php

class Loader
{    
    public static function registerAutoload()
    {
        return spl_autoload_register(array(__CLASS__, 'includeClass'));
    }

    public static function unregisterAutoload()
    {
        return spl_autoload_unregister(array(__CLASS__, 'includeClass'));
    }

    public static function registerExtensions()
    {
        return spl_autoload_extensions('.php. .class.php'); 
    }

    public static function includeClass($class)
    {
        require(PATH . '/' . strtr($class, '_\\', '//') . '.php');
    }
}

?>
于 2012-08-08T16:37:58.150 回答