2016-11-13 3 views
0

Problem?Autoloader-Problem nicht zurückgegeben Klasse

Bootloader (Autoloader) scheint nicht richtig zu funktionieren, oder ich vermisse etwas. Hier ist der vereinfachte Code.

Der folgende Code gibt

Klasse "Skeleton" existiert nicht.

Auf index.php-Datei.

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/Skeleton/Html/LoginHeader.php

<?php 

namespace Skeleton\Html; 

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

Antwort

1

Ein paar Fragen hier:

1) Diese Zeile/Abschnitt ist nicht richtig:

class LoginHeader() { 

Sollte sein:

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

2) Sie Ihre Klasse nicht richtig zuordnen. Sie haben:

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

Schrägstriche werden sollten:

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

Sobald Sie Ihre Schrägstriche zu beheben, erhalten Sie einen Syntaxfehler auf der Klasse Seite erhalten, wie erwähnt, aber Ihr Autoloader selbst funktioniert gut.

Verwandte Themen