Heim  >  Artikel  >  Backend-Entwicklung  >  Bei der Verwendung von spl_autoload in PHP lautet das übergebene Namespace-Trennzeichen, was unter Linux ein Problem darstellt

Bei der Verwendung von spl_autoload in PHP lautet das übergebene Namespace-Trennzeichen, was unter Linux ein Problem darstellt

WBOY
WBOYOriginal
2016-09-06 08:57:08826Durchsuche

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

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn