我尝试在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());
1条答案
按热度按时间wz3gfoph1#
您在此处有额外空间:
它应该是:
这是PHP 8语法中的一个变化:
命名空间名称不能再包含空格:虽然Foo\Bar将被识别为命名空间名称,但Foo \ Bar不会。相反,现在允许保留关键字作为命名空间段,这也可能会更改代码的解释:new\x现在与常量('new\x ')相同,而不是new \x()。
(ref)