【问题标题】:namespace & __autoload命名空间 & __autoload
【发布时间】:2012-04-20 15:09:35
【问题描述】:

我有一个文件 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]:无法打开流:第 11 行的 C:\wamp\www\Formular_contact\index.php 中没有这样的文件或目录。对于我使用的所有版本它给了我错误 有人能帮帮我吗?

【问题讨论】:

  • 小心使用有问题的标题;我只是在这里停下来,因为我认为__autoload 是通过引用返回的。

标签: php namespaces autoload


【解决方案1】:
define(CLASS_DIR, "/path_to_your_classes_to_load/");

require_once CLASS_DIR . str_replace('\\', '/', ltrim($className, '\\')) . '.php'; 

【讨论】:

  • 不工作。 with:命名空间数据库; 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();给出:致命错误:在第 15 行的 C:\wamp\www\Formular_contact\index.php 中找不到类 'database\SQL_config'
【解决方案2】:

您需要将“\”替换为“/”并在新类名的末尾添加一个“.php”,因为它只会获取没有逗号和扩展名的名称。并在正确的文件夹中找到该类,如路径所示。

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

确保您在正确的文件夹中找到类文件,例如

./database/SQL_config.php

如果您的班级位于“classes”文件夹中,请改用此方法。

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

确保在正确的文件夹中找到类文件,例如

./classes/database/SQL_config.php

在您提供的代码中 - 类文件在文件结构中的位置也很重要。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-09
    • 2019-05-08
    • 2010-10-20
    • 1970-01-01
    • 1970-01-01
    • 2013-12-03
    • 2016-05-24
    • 2010-12-23
    相关资源
    最近更新 更多