PHP spl自动加载类未自动加载

h5qlskok  于 2022-12-17  发布在  PHP
关注(0)|答案(1)|浏览(89)

我尝试在php 8.1中使用SPL自动加载器,但是得到了下面的错误。
PHP Parse error: syntax error, unexpected identifier "Router", expecting "{" in index.php on line 54
我已经在类似的环境中测试过了,但是在不同版本的php和低于8.1的版本上都运行得很好,所以这个问题是8.1独有的。
我似乎找不到任何东西,除了旧的autoloader函数正在贬值的文档,这是由spl取代。
我不禁觉得这是一个特定于8.1的语法错误,实际上与spl autoloader没有任何关系,但我又一次尝试了各种方法,似乎都无法找到它的根源。
有人知道这可能发生的具体原因吗?
贝娄是我用的密码。它也是在8秒内有效。

<?php

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

class Init {
    
    function __construct() {

        define( 'APPS_PATH', dirname( __FILE__ ) . '/' );
        
                // Get params
        $this->page = (isset($_GET['page'])) ? $_GET['page'] : 'Home';
        $this->action = (isset($_GET['page'])) ? $_GET['action'] : false;
            
    }
    
    public function get_page(){
        
        return $this->page;
        
    }
    
    public function get_action(){
        return $this->action;
    }

    public static function register() {
        spl_autoload_register( function ( $class ) {
            $class = str_replace( '\\', '/', $class );
            $class = str_replace( '/\s+/', '', $class );
            $file = APPS_PATH . $class . '.php';
            
            if ( file_exists( $file ) ) {
                // Check for Clas Introduction : echo '['.$file.']'.PHP_EOL;
                require_once ( $file );
                return true;
            }
            return false;
        } );
    }
    
}

$init = new Init();

$init->register();

// Routing to operation
use routing\ Router as Router;

$router = new Router();

$router->go_to_page($init->get_page());
wz3gfoph

wz3gfoph1#

您在此处有额外空间:

use routing\ Router as Router;

它应该是:

use routing\Router as Router;

这是PHP 8语法中的一个变化:
命名空间名称不能再包含空格:虽然Foo\Bar将被识别为命名空间名称,但Foo \ Bar不会。相反,现在允许保留关键字作为命名空间段,这也可能会更改代码的解释:new\x现在与常量('new\x ')相同,而不是new \x()。
ref

相关问题