我刚开始学习面向对象的 PHP 并遇到了一个小问题。一位同事告诉我,最好使用依赖注入,而不是继承数据库类。我想使用依赖注入,但我不知道如何。我尝试在构造函数中使用,但弹出错误:
致命错误::
Uncaught TypeError传递给的参数 1signIn::__construct()必须是数据库实例,给定数组,C:\xampp\htdocs\messbox\index.php在第 54 行调用并在C:\xampp\htdocs\messbox\klasy\sign_in.php:12
堆栈跟踪中定义:
#0C:\xampp\htdocs\messbox\index.php(54):signIn->__construct(Array)
#1在第 12 行{main}抛出C:\xampp\htdocs\messbox\klasy\sign_in.php
我希望有人向我解释如何正确使用它。
<?php
class database {
private $servername = "localhost";
private $username = "root";
private $password = "";
private $dbname = "messbox";
public function connect() {
$this->servername = "localhost";
$this->username = "root";
$this->password = "";
$this->dbname = "messbox";
try {
$dsn = "mysql:host=" . $this->servername . ";dbname=" . $this->dbname;
$pdo = new PDO($dsn, $this->username, $this->password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
return $pdo;
} catch (PDOException $e) {
echo "Connection failed: " . $e->getMessage();
}
}
}
?>
require_once('connect.php');
class signIn {
private $data;
private $errors = '';
private $count;
private $database;
public function __construct(database $database) {
$this->database = $database;
}
public function validate_login() {
$val = trim($this->data['log']);
if (empty($val)) {
return $this->errors = "Field can not empty!";
}
}
public function validate_password() {
$val = trim($this->data['pass']);
if (empty($val)) {
return $this->errors = "Field can not empty!";
}
}
public function ifexist() {
$field1 = $this->data['log'];
$field2 = $this->data['pass'];
$sql = $this->connect()->prepare("SELECT * FROM users where login = :login");
$sql->bindParam(':login', $field1, PDO::PARAM_STR);
$sql->execute();
if ($sql->rowCount()) {
header("location:./home.php");
return $this->count = 10;
} else {
return $this->count = 2;
}
}
public function setSession() {
if ($this->licznik == 10) {
$field1 = $this->data['log'];
$sql = $this->connect()->prepare("SELECT * FROM users where login = :login");
$sql->bindParam(':login', $field1, PDO::PARAM_STR);
$sql->execute();
while ($row = $sql->fetch()) {
$_SESSION['id'] = $row['id'];
echo $_SESSION['login'] = $row['login'];
$_SESSION['avatar'] = $row['avatar'];
echo "<img src='".$row['avatar']."'/>";
$_SESSION['email'] = $row['email'];
$_SESSION['first_name'] = $row['first_name'];
$_SESSION['last_name'] = $row['last_name'];
$_SESSION['number_phone'] = $row['number_phone'];
$_SESSION['gender'] = $row['gender'];
$_SESSION['birth_date'] = $row['birth_date'];
$_SESSION['age'] = $row['age'];
}
} else
return "Not working";
}
}
}
?>