自动装带器问题未返回班级

时间:2016-11-13 00:31:22

标签: php namespaces autoloader

问题吗

Bootloader(自动加载器)似乎没有正常工作,或者我遗漏了一些东西。这是简化的代码。

以下代码返回

  

“骷髅”类不存在。

在index.php文件上。

的index.php

<?php

include 'bootloader.php';
use Skeleton\Html\LoginHeader;
$tool = new Skeleton/Html/LoginHeader();

bootloader.php

<?php

function Boot($className) {
        $fileName = '';
        $namespace = '';

        // Sets the include path as the "src" directory
        $includePath = dirname(__FILE__).DIRECTORY_SEPARATOR.'src';

        if (false !== ($lastNsPos = strripos($className, '\\'))) {
            $namespace = substr($className, 0, $lastNsPos);
            $className = substr($className, $lastNsPos + 1);
            $fileName = str_replace('\\', DIRECTORY_SEPARATOR, $namespace) . DIRECTORY_SEPARATOR;
        }
        $fileName .= str_replace('_', DIRECTORY_SEPARATOR, $className) . '.php';
        $fullFileName = $includePath . DIRECTORY_SEPARATOR . $fileName;

        if (file_exists($fullFileName)) {
            require $fullFileName;
        } else {
            echo 'Class "'.$className.'" does not exist.';
        }
    }
    spl_autoload_register('Boot'); // Registers the autoloader

的src /骨架/ HTML / LoginHeader.php

<?php

namespace Skeleton\Html;

class LoginHeader () {
    echo "<h1>Login Header OK!</h1>";
}

1 个答案:

答案 0 :(得分:0)

这里有几个问题:

1)此行/部分不正确:

class LoginHeader () {

应该是:

class LoginHeader
    {
        public function __construct()
            {
                echo "<h1>Login Header OK!</h1>";
                ...etc

2)您没有正确分配课程。你有:

$tool = new Skeleton/Html/LoginHeader();

应该是反斜杠:

            --------v----v
$tool = new Skeleton\Html\LoginHeader();

修复反斜杠后,如上所述,您将在课程页面上收到语法错误,但您的自动加载器本身工作正常。