пространство имен и __autoload

У меня есть файл SQL_config.php:

namespace database;

class SQL_config
{
    private $_server="localhost";
    private $_user="root";
    private $_password="";

    private static $_singleton;
    private $_connection;

    protected function __construct()
    {
        $this->_connection=mysql_connect($this->_server,$this->_user,$this->_password);
    }

    public static function getInstance()
    {
        if(is_null(self::$_singleton))
        {
            self::$_singleton=new SQL_config();
        }

        return self::$_singleton;
    }
}

и index.php:

//namespace database;
//require_once'SQL_config.php';

 function __autoload($class)
    {  
     // convert namespace to full file path  
    //$class = 'database/' . str_replace('\\', '/', $class) . '.php';  
    //require_once($class); 
    require_once  $class . '.php'; 
    }  


$connection=database\SQL_config::getInstance();

и не работает. Предупреждение: require_once(database\SQL_config.php) [function.require-once]: не удалось открыть поток: нет такого файла или каталога в C:\wamp\www\Formular_contact\index.php в строке 11. Для всех версий, которые я использую это дает мне ошибку, кто-нибудь может мне помочь?


person murariubgdn    schedule 07.04.2012    source источник
comment
Осторожно используйте амперсанд в названиях вопросов; Я остановился здесь только потому, что думал, что __autoload возвращается по ссылке.   -  person Dan Lugg    schedule 23.03.2013


Ответы (2)


Вам нужно заменить «\» на «/» и добавить «.php» в конец имени нового класса, так как он получит только имя без запятой и расширения. И найдите класс в правильной папке, как показано на пути.

function __autoload($className){
    $newClassName= str_replace("\\", "/", $className) .".php";
    require_once($newClassName);
}

Убедитесь, что вы нашли файл класса в правильных папках, таких как

./база данных/SQL_config.php

Если ваш класс находится в папке «классы», попробуйте это вместо этого.

function __autoload($className){
    $newClassName = "classes/";
    $newClassName .= str_replace("\\", "/", $className) .".php";
    require_once($newClassName);
}

Убедитесь, что вы нашли файл класса в правильных папках, таких как

./классы/база данных/SQL_config.php

В коде, который вы представили - также важно расположение вашего файла класса в файловой структуре.

person DevWL    schedule 13.08.2014

person    schedule
comment
Не работай. с: базой данных пространства имен; require_once'SQL_config.php'; $connection=SQL_config::getInstance(); работает, но я хочу использовать функцию __autoload(). база данных пространства имен; определить (CLASS_DIR, база данных); функция __autoload ($ class) { require_once CLASS_DIR . str_replace('\\','/',ltrim($class,'\\')).'.php'; } $connection=SQL_config::getInstance(); дайте: Неустранимая ошибка: класс 'database\SQL_config' не найден в C:\wamp\www\Formular_contact\index.php в строке 15 - person murariubgdn; 07.04.2012