PHP如何指定函数返回类型?声明string返回后运行失败怎么办?
问题根因
- 你为
ValidateSchool函数声明了string返回类型,但仅在校验失败的两个分支里返回了字符串,当校验通过时,两个if条件都不触发,函数执行完没有任何返回值,PHP会默认返回null,和你声明的string类型不匹配,直接抛出类型错误。 - 另外还有两个隐藏的同类问题需要同步修复:
UpdateSchool函数也声明了string返回类型,但整个函数逻辑里没有任何return语句,执行后同样会返回null触发类型错误SchoolValidation类里的$data属性你声明为string类型,但代码里你是作为数组使用(取$this->data['school']),如果传入的$data是数组,也会触发属性类型错误
修复方案
1. 修复ValidateSchool函数
校验通过时主动返回空字符串(和你默认的error初始值对齐,符合现有逻辑):
public function ValidateSchool(): string { $val = htmlspecialchars($this->data['school']); if(empty($val)) { return $this->error = "Podaj szkole"; }else if(!preg_match('/^[A-Za-z_\-\s]+$/', $val)) { return $this->error = "Nieporawny format"; } // 新增校验通过的返回逻辑 return $this->error = ''; }
2. 修复SchoolValidation的$data属性类型
把属性类型改为数组匹配实际使用场景:
// 原代码 private string $data; 替换为下方代码 private array $data;
3. 修复UpdateSchool函数
补充返回值,可根据你的业务需求调整返回内容,示例:
public function UpdateSchool(): string { if(empty($this->schoolValidation->getError())) { $school = htmlspecialchars($this->data["school"]); $session = htmlspecialchars($_SESSION['user_id']); $query = $this->database->ConnectDatabase()->prepare("UPDATE user set school = :school where user_id = :id"); $query->bindParam(':school', $school, PDO::PARAM_STR); $query->bindParam(':id', $session, PDO::PARAM_INT); $query->execute(); return '更新成功'; } return $this->schoolValidation->getError(); }
内容的提问来源于stack exchange,提问作者Beks12
相关产品推荐
相关产品推荐

