You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复PHP中Syntax error, unexpected 'TokenType' (T_STRING)错误?

问题分析与解决方案

错误原因

你遇到的Parse error: syntax error, unexpected 'TokenType'错误,核心原因是PHP版本不支持原生枚举:

  • enum是PHP 8.1才正式引入的语法特性,若你的AMPPS环境中PHP版本低于8.1,解释器无法识别enum关键字,会把TokenType当作意外的字符串,触发语法错误。
  • 顺带提一个小问题:你的include语句末尾缺少分号,规范写法应为:
<?php
   include 'TokenType.php';
?>

虽然这个小问题不会直接导致当前错误,但建议修正以符合PHP语法规范。

解决错误的步骤

  1. 升级PHP版本:将AMPPS中的PHP版本升级到8.1或更高版本,原生枚举语法即可正常工作。
  2. 修正include语句:添加缺失的分号,避免潜在的语法问题。

PHP中声明枚举的替代方案(针对PHP 8.1以下版本)

由于PHP 8.1之前没有原生枚举,可通过以下方式模拟枚举行为:

1. 类常量模拟(最简单的方案)

用类常量定义枚举值,通过类名访问:

class TokenType {
    const INT = 'INT';
    const STRING = 'STRING';
    const COMMA = 'COMMA';

    // 禁止实例化类
    private function __construct() {}
}

使用示例:

$type = TokenType::INT;

2. 抽象类+单例实例模拟(接近原生枚举的行为)

通过单例模式确保每个枚举值是唯一实例,更贴近原生枚举的类型安全特性:

abstract class TokenType {
    private string $value;

    public const INT = self::class . ':INT';
    public const STRING = self::class . ':STRING';
    public const COMMA = self::class . ':COMMA';

    private static array $instances = [];

    private function __construct(string $value) {
        $this->value = $value;
    }

    public static function get(string $type): self {
        if (!isset(self::$instances[$type])) {
            self::$instances[$type] = new static($type);
        }
        return self::$instances[$type];
    }

    public function getValue(): string {
        return $this->value;
    }
}

使用示例:

$intToken = TokenType::get(TokenType::INT);
echo $intToken->getValue(); // 输出 "TokenType:INT"

3. SplEnum扩展实现(需安装扩展)

利用PHP标准库的SplEnum扩展(需在php.ini中启用extension=splenum):

class TokenType extends SplEnum {
    const __default = self::INT;
    const INT = 1;
    const STRING = 2;
    const COMMA = 3;
}

使用示例:

$token = new TokenType(TokenType::STRING);

内容的提问来源于stack exchange,提问作者Luis Pichardo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 15:15:44