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

PHP项目遇Intelephense(1006)错误:期望类型'object',实际为'void'求解决

解决Intelephense(1006) "Expected type 'object'. Found 'void'" 错误

错误原因

这个错误来自静态代码分析工具Intelephense的类型推断问题:

  • 类属性$connect没有显式类型声明,工具无法确定它的具体类型
  • mysqli_connect()连接失败时会返回false而非对象,导致类型不确定
  • logIn方法里的$this->c onnect存在多余空格,属于语法错误,进一步干扰了工具的类型分析

修复步骤

  1. 给属性添加类型声明
    为$connect明确声明类型,PHP 8.0+支持联合类型,可声明为public mysqli|false $connect;,也可用可空类型public ?mysqli $connect;(表示允许为null或mysqli对象)。

  2. 给方法添加返回类型声明
    给dbConnect方法添加返回类型,让Intelephense明确知道它的返回值类型。

  3. 修复语法错误
    修正logIn方法中$this->c onnect的多余空格,改为$this->connect。

  4. 增加连接有效性校验
    在各数据库操作方法中先判断$connect是否有效,避免后续调用mysqli函数时传入非对象值。

修改后的完整代码

class DataBase
{
    // 明确声明$connect的类型
    public mysqli|false $connect;
    public $data;
    private $sql;
    protected $servername;
    protected $username;
    protected $password;
    protected $databasename;

    public function __construct()
    {
        $this->connect = null;
        $this->data = null;
        $this->sql = null;
        $dbc = new DataBaseConfig();
        $this->servername = $dbc->servername;
        $this->username = $dbc->username;
        $this->password = $dbc->password;
        $this->databasename = $dbc->databasename;
        $this->dbConnect();
        
        // 可选:连接失败时直接终止并输出错误
        if (!$this->connect) {
            die("数据库连接失败: " . mysqli_connect_error());
        }
    }

    // 添加返回类型声明
    function dbConnect(): mysqli|false
    {
        $this->connect = mysqli_connect($this->servername, $this->username, $this->password, $this->databasename);
        return $this->connect;
    }

    function prepareData($data)
    {
        if (!$this->connect) {
            return false;
        }
        return mysqli_real_escape_string($this->connect, stripslashes(htmlspecialchars($data)));
    }

    function logIn($user, $username, $password)
    {
        if (!$this->connect) {
            return false;
        }
        
        $username = $this->prepareData($username);
        $password = $this->prepareData($password);
        $this->sql = "select * from " . $user . " where username = '" . $username . "'";
        $result = mysqli_query($this->connect, $this->sql);
        
        if (!$result) {
            return false;
        }
        
        $row = mysqli_fetch_assoc($result);
        $login = false;
        if (mysqli_num_rows($result) != 0) {
            $dbusername = $row['username'];
            $dbpassword = $row['password'];
            if ($dbusername == $username && password_verify($password, $dbpassword)) {
                $login = true;
            }
        }

        return $login;
    }

    function signUp($user, $fullname, $email, $username, $password)
    {
        if (!$this->connect) {
            return false;
        }
        
        $fullname = $this->prepareData($fullname);
        $username = $this->prepareData($username);
        $password = $this->prepareData($password);
        $email = $this->prepareData($email);
        $password = password_hash($password, PASSWORD_DEFAULT);
        $this->sql =
            "INSERT INTO " . $user . " (fullname, username, password, email) VALUES ('" . $fullname . "','" . $username . "','" . $password . "','" . $email . "')";
        
        return mysqli_query($this->connect, $this->sql) ? true : false;
    }
}

额外提示

  • 建议使用预处理语句替代字符串拼接SQL,彻底避免SQL注入风险,比如使用mysqli_prepare和bind_param方法。
  • 升级到PHP 8.0+可以获得更完善的类型支持,让静态分析工具的推断更准确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 21:37:49