2015-06-16 2 views
2

Я новичок в пространстве имен PHP. и есть проблема, когда я использую автонагрузку.PHP требует файлов при использовании пространства имен

ROOT/Application/Instance.php

<?php 

namespace Application; 

class Instance { 

    public static $_database; 

    public function __construct() { 
     self::$_database = new \Application\Module\Database(); 
    } 

    public static function database() { 
     return self::$_database; 
    } 

    public static function ID(){ 
     return md5(uniqid(mt_rand(), TRUE) . mt_rand() . uniqid(mt_rand(), TRUE)); 
    } 

    public static function autoload($_className) { 
     $thisClass = str_replace(__NAMESPACE__.'\\', '', __CLASS__); 
     $baseDir = __DIR__; 
     if (substr($baseDir, -strlen($thisClass)) === $thisClass) { 
      $baseDir = substr($baseDir, 0, -strlen($thisClass)); 
     } 
     $_className = ltrim($_className, '\\'); 
     $fileName = $baseDir; 
     $namespace = ''; 
     if ($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'; 
     if (file_exists($fileName)) { 
      require $fileName; 
     } 
    } 

    public static function registerAutoloader() { 
     spl_autoload_register(__NAMESPACE__ . "\\Instance::autoload"); 
    } 

} 

ROOT/Application/Module/Database.php

<?php 

namespace Application\Module; 

include 'FluentPDO/FluentPDO.php'; 

class Database extends Module { 

    public static $_instance; 

    public function __construct() { 
     if(self::$_instance === NULL) { 
      self::$_instance = new FluentPDO(new PDO("mysql:host=8273639.mysql.rds.aliyuncs.com;dbname=db", 'name', 'password')); 
     } 
    } 

} 

Когда я запускаю это:

new \Application\Instance(); 

Я получил эту ошибку:

Fatal error: Class 'Application\Module\FluentPDO' not found in /mnt/www/airteams_com/public/Application/Module/Database.php on line 13 

Я уверен, что 'FluentPDO/FluentPDO.php' существует. и ошибка показывает неправильный путь файла. правый путь 'ROOT/Application/Module/FluentPDO/FluentPDO.php'

Так как я могу использовать класс пространства имен в моей ситуации? Благодарю.

ответ

1

Когда вы работаете с пространствами имен, вы должны полностью квалифицировать каждый класс, если он не является дочерним по отношению к текущему пространству имен.

В качестве такого FluentPDO, вероятно, на корневом пространстве имен, что означает, что вам нужно получить к нему доступ, как например:

self::$_instance = new \FluentPDO(new \PDO("mysql:host=8273639.mysql.rds.aliyuncs.com;dbname=db", 'name', 'password')); 
+0

Это работает! Спасибо. – Winmain

Смежные вопросы