当前位置: 首页 > 知识库问答 >
问题:

如何将mysqli对象传递给类构造函数

漆雕稳
2023-03-14

我试图使一个用户类和使用类来处理登录,但从某种原因我的用户类构造函数是读取我的mysqli对象作为一个字符串

这是我的密码

Class.php

<?php

/**
* 
*/
class user{ 
    protected $email;
    protected $password; 
    private $db;
    protected $user;

    function __construct(mysqli $db, $email, $password){
        $this -> $db = $db;
        $this -> $email = $email;
        $this -> $password = $password;
    }

    protected function check(){
        $query = 'SELECT * FROM user WHERE email =?';
        $handler = $this -> $db -> prepare($query);
        $handler -> execute(array($this->email));
        if($handler -> num_rows() > 0){
            $user = $handler -> fetch();
            $submitpassword = ($this -> $password);
            if ($submitpassword == $user['password']) {
                return $user;
            }
        }
        return false;
    }
    public function login(){
        $user = $this->check();
        if ($user) {
            $this->_user = $user; // store it so it can be accessed later
            $_SESSION['user_id'] = $user['id'];
            return $user['id'];
        }
        return false;
    }

public function getUser(){
    return $this->_user;
}

}

?>

mysql.php

<?php

if (!isset($_POST['submit'])) {
    echo 'Page not found';
    exit();
}

$servername = "localhost";
$username = "root";
$password = "";
$db = "imagesite";

// Create connection
$conn = new mysqli($servername, $username, $password,$db);

// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}

?>

checklogin.php

<?php

include 'mysql.php';
include 'class.php';

// username and password sent from form 
$email=$_POST['email']; 
$pass=$_POST['password']; 

$user = new user($conn, $email, $pass);
$id = $user -> login();
if ($id) {
    echo 'Logged it as user id: '.$user_id;
}else{
    echo 'did not work';
}


?>

它给了我这个错误

可捕获的致命错误:在第13行的C:\wamp\www\class.php中,类mysqli的对象无法转换为字符串

我要把头发拔出来了,有什么想法吗?

共有1个答案

麻华辉
2023-03-14

要使用实例属性,不需要美元符号。简单地改变

function __construct(mysqli $db, $email, $password){
    $this -> $db = $db;
    $this -> $email = $email;
    $this -> $password = $password;
}

对此:

function __construct(mysqli $db, $email, $password){
    $this->db = $db;
    $this->email = $email;
    $this->password = $password;
}
 类似资料:
  • 我创建了一个Author对象,用于构造函数的方法签名:public Book但是,我所做的赋值要求将Author(实例变量)更改为。当然,现在我以前的构造函数不行了。这是密码 如果我上传的方式不令人满意,我对任何不便表示歉意。我还没有学会使用堆栈溢出。 谢谢!

  • 问题内容: 这是我的基本功能: 此功能能够连接并在我的数据库上执行查询… 我想创建相同的功能,但更通用。…前一个仅用于一个表(),新表必须能够接受查询的参数作为输入,以及将在其中执行查询的类类型。这将允许我仅使用一行来执行查询。 应该是这样的: 您发现我不知道如何“通用”代码… 我希望已经清楚了… PS 应该是DB()中表的类的代表。 谢谢。 问题答案: 如果您打算返回结果集,请使用:

  • 问题内容: 大家晚上好。 当尝试将一个对象传递给另一个对象构造函数时,我似乎遇到了一个奇怪的问题,该对象的构造函数也依赖于要传递给它的对象。 例如,使用以下示例: 但是,在构造ToolBar时,它将返回NullPointerException。当然,这是因为尚未构建webPanel并且需要它。 减速和初始化都必须保留在同一类(称为BuildUI)中,因为这是我设置属性的地方。(对于ToolBar创

  • 这是基于我的最后一个问题,为什么我会得到一个类强制转换异常(与泛型类似)? 这又是我的设计。我有一个抽象的超类AbstractArrayList和两个扩展它的具体子类sorted和UnsortedArrayList。 这里的AbstractArrayList管理实际数据,因为它需要为已经实现的方法。 下面是ArrayListSorted的声明,它扩展了AbstractArrayMyList 以及导

  • 我为什么要这样做?因为lambda表达式生成的ClosureType不是默认可构造的。通过这个“技巧”,我可以默认构造这样的closureType。 此外,模板参数的要求是,它必须为空=>

  • 我正在尝试通过:如果流文件; 在我的主()中,到一个名为“FIFO”的类的构造函数:FIFO(文件); 在FIFO(FIFO.h)的头文件中,我有: 在FIFO.cc,我有: 我一直喜欢(还有更多,我只是粘贴其中一个): 在文件包括从/usr/lib/gcc/x86_64-redhat linux/4.4.7/…/…/…/…/包含/c /4.4.7/bits/localefwd.h: 43,从/u