Home  >  Article  >  Backend Development  >  When using spl_autoload in php, the namespace delimiter passed is, this is a problem on Linux

When using spl_autoload in php, the namespace delimiter passed is, this is a problem on Linux

WBOY
WBOYOriginal
2016-09-06 08:57:08823browse

use CoreConfig;
use CoreRouter;

class Framework {

public static function init() {
    require_once (__DIR__ . '/functions.php');
    // 自动加载设置
    spl_autoload_register('self::loadClass');
    define("ROOT", getcwd());
    define('APP', ROOT . '/' . Config::get('app.app_name'));
    // 设置时区
    ini_set('date.timezone', Config::get('app.timezone'));
    $router = new Router();
    // 加载路由设置
    require_once (APP . '/routes.php');
    $router->dispatch();
}

public static function loadClass($className) {
    // linux上路径
    $className = str_replace("\\", "/", $className);
    $filename = ROOT . "/" . $className . ".php";
    if(is_file($filename))
        require_once($filename);
    else
        throw new \Exception("$filename Is Not Found");
}
</p>
<p>}</p>
<p>然后我用str_replace函数替换,总感觉这样不是最好的方案</p>

                            
                        


                                                                                                                        
                     <h2>回复内容:</h2>
                      
                                                            
<p><?php</p>
<p>use CoreConfig;<br>use CoreRouter;</p>
<p>class Framework {</p>
<pre class="brush:php;toolbar:false"><code>public static function init() {
    require_once (__DIR__ . '/functions.php');
    // 自动加载设置
    spl_autoload_register('self::loadClass');
    define("ROOT", getcwd());
    define('APP', ROOT . '/' . Config::get('app.app_name'));
    // 设置时区
    ini_set('date.timezone', Config::get('app.timezone'));
    $router = new Router();
    // 加载路由设置
    require_once (APP . '/routes.php');
    $router->dispatch();
}

public static function loadClass($className) {
    // linux上路径
    $className = str_replace("\\", "/", $className);
    $filename = ROOT . "/" . $className . ".php";
    if(is_file($filename))
        require_once($filename);
    else
        throw new \Exception("$filename Is Not Found");
}
</p>
<p>}</p>
<p>然后我用str_replace函数替换,总感觉这样不是最好的方案</p>

                            
                        
            <p class="answer fmt" data-id="1020000006823690">
                                    </p>
<p>你的方法是对的,不过通常不是替换成<code>/,而是使用常量DIRECTORY_SEPARATOR

使用通用分隔符,DIRECTORY_SEPARATOR

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn