PHP 7.4出现T_STRING语法错误,请求排查User类第6行问题
解决PHP类属性类型声明的语法错误问题
这个错误很典型,咱们一步步拆解解决:
错误核心原因
你碰到的 Parse error: syntax error, unexpected 'string' 本质是PHP版本不支持类属性的标量类型声明。虽然你说使用的是PHP7.4,但大概率你的XAMPP环境里的PHP版本实际低于7.4——毕竟PHP7.4才正式引入private string $firstName;这种属性类型声明的写法,在7.3及更早版本中,PHP会把string当成未识别的标识符,直接触发语法错误。
两种可行解决方案
你可以根据自身情况选择:
方案1:升级PHP到7.4或更高版本
打开XAMPP控制面板,查看PHP模块的实际版本号。如果确实低于7.4,直接升级XAMPP到包含PHP7.4的版本,或者替换XAMPP内的PHP目录为官方发布的7.4版本包。升级完成后,你原本的属性类型声明写法就是完全合法的。
方案2:移除属性类型声明,用Setter方法做类型校验
如果暂时无法升级PHP,你可以去掉类属性的类型声明,保留setName方法里的类型检查逻辑(你已经写了一部分),既能保证类型安全,又能兼容低版本PHP。
修正后的User类代码示例:
<?php class User { // 移除属性的类型声明 private $firstName; private $lastName; private $email; private $password; private $rePassword; /** * @param string $firstName */ public function setName(string $newName) { // 原有校验逻辑可完整保留 if (($this->checkIfThereNumber($newName) === 0) && ($this->checkIfThereSpecialCharacters($newName) === 0)) { if ($this->checkLengthOfName($newName) == false) { if ($this->checkOccurrenceOfLetter($newName) == true) { $this->firstName = $newName; echo "your {$newName} was created successful"; } else { die(); } } else { echo "<script> alert('the length of your first name " . $newName . " is not allowed. It should be 3 or more but not more than 10 ')</script>"; die(); } } else { echo "<script> alert('your marke name " . $newName . " contain not acceptable items numbers and other special characters are not allowed ')</script>"; die(); } } // 记得补充你用到的checkIfThereNumber、checkLengthOfName等方法的实现 }
额外排查点
如果确认PHP版本确实是7.4,那可以检查两个小细节:
php.ini里是否有禁用类型声明特性的配置(这种情况极少);- 代码第6行前后是否有隐藏的特殊字符(比如全角空格、不可见符号),复制粘贴的代码偶尔会带这类问题导致语法报错。
内容的提问来源于stack exchange,提问作者Adam99991
相关产品推荐
相关产品推荐

