Ok !!! 이제, 나는 왜 spl_autoload_register()가 클래스를로드 할 수 없는지에 대한 실마리가 떨어진다.namespace 사용시 PHP spl_autoload_register가 require scope로 클래스를로드 할 수 없습니다
내 폴더 구조는 다음과 같다 ..
애플리케이션
- 제어기
- 시스템
- 제어기
- welcome.php
- 핵심
- BaseController.php
- Load.php
index.php를
내 BaseController.php 코드
<?php
namespace system\core;
class BaseController {
public function __construct() {
spl_autoload_register(array($this, 'loader'));
}
private function loader($className) {
$className = ltrim($className, '\\');
$fileName = '';
$namespace = '';
if ($lastNsPos = strrpos($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';
require $fileName;
}
}
내 Load.php 코드
<?php
namespace system\core;
class Load {
public function view()
{
echo "Method for loading view";
}
}
내 welcome.php 코드
<?php
class Welcome extends system\core\BaseController {
public function index()
{
$obj_load = new Load();
$obj_load->view();
}
}
내 index.php에 코드
이 코드를 실행하고있어<?php
error_reporting(E_ALL);
ini_set('display_errors', '1');
require_once "system/core/BaseController.php";
require_once "application/controller/welcome.php";
$welcome = new welcome();
echo $welcome->index();
(index.php) 다음 오류가 발생했습니다 ...
Fatal error: Class 'Load' not found in /var/www/nut/test/application/controller/welcome.php on line 5
하지만 Load.php에서 네임 스페이스를 제거하면 오류가 발생하지 않습니다. 왜 네임 스페이스 (Load.php에서 사용)가 오류를 생성하는지 이해할 수 없습니다.
어떤 생각 ...
감사합니다 마크가 언급 한 바와 같이 귀하의 파일을 포함 할 때, 잘못된 문자를 사용하는
클래스 이름은'system \ core \ Load'입니다. 당신은''system/core/'.$ className을로드하려고 시도하고있다. '.php ';'는'system/core/system \ core \ Load.php'라는 파일로 평가됩니다 .... –
오토로더는 클래스 이름의 분리 기호를 폴더 분리 기호로 변환해야합니다. –
@ MarkBaker이 링크에 표시된대로 PHP- 그림 예제 코드를 사용하여 오토로더 코드를 제거했습니다.> http://www.php-fig.org/psr/psr-0/ 그래도 여전히 나는 같은 오류가 나타납니다. – mi6crazyheart