鍍金池/ 問答/PHP  HTML/ spl_autoload_register的問題

spl_autoload_register的問題

去訪問一個純html文件,理論上應該是不會訪問到else里面的內(nèi)容,結(jié)果服務器在這一行$api = new $classname;報錯,而瀏覽器則是在加載完<head>標簽中的js之后,在<body>標簽最后的js報出500錯誤

index大面如下

// 分析uri
$path = $_SERVER['REQUEST_URI'];
$paramerters = explode('/',$path);
//加載核心類 初始化
//require_once DIR.'/autoload/_Autoload.php';
$len = count($paramerters) - 1;

if(preg_match('/\.html$/',$path)){
    // 純html
    $page = file_get_contents("./view/{$paramerters[$len]}");
    echo $page;
}else{
    //api接口
        $classname = $paramerters[2];
        $functioname = $paramerters[3];
        //自動加載類
        if(!preg_match('/\.html$/',$path)){
            define('DIR',dirname(__FILE__));
            require_once DIR.'/autoload/Autoload.php';
            $res = spl_autoload_register("\\Core\\Autoload::_autoload");
            $api = new $classname;
            $api->{$functioname}();
        }
}
回答
編輯回答
北城荒

因為$api = new $classname;有語法錯誤吧。應該寫成:$api = new $classname();
php要先編譯再運行,編譯時有語法錯誤就終止輸出了。

2018年1月18日 15:12
編輯回答
葬憶

報錯信息呢?
你為啥要在preg_match('/\.html$/',$path) == false的情況下,再判斷!preg_match('/\.html$/',$path)==true
可能原因如下:

  1. $classname對應的類未加載上;
  2. new 的時候如果報語法錯誤把括號加上;
2018年9月12日 16:24
編輯回答
逗婦惱

突然想起來,是瀏覽器拿到html之后,會根據(jù)里面內(nèi)容再次請求js等文件。之后請求js文件的的request(中文有點拗口)就會直接重定向到index.php,正則就沒有匹配成功,報500錯誤。

2018年5月10日 03:58
編輯回答
夏木
if(preg_match('/\.html$/',$path))
去除html后的$,$表示以.html結(jié)尾,如果REQUEST_URI是xxx.html?a=1&b=2便無法通過正則匹配
2017年1月21日 10:49