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

PHP如何指定函数返回类型?声明string返回后运行失败怎么办?

问题根因

  • 你为ValidateSchool函数声明了string返回类型,但仅在校验失败的两个分支里返回了字符串,当校验通过时,两个if条件都不触发,函数执行完没有任何返回值,PHP会默认返回null,和你声明的string类型不匹配,直接抛出类型错误。
  • 另外还有两个隐藏的同类问题需要同步修复:
    1. UpdateSchool函数也声明了string返回类型,但整个函数逻辑里没有任何return语句,执行后同样会返回null触发类型错误
    2. 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 09:54:03