gpt4 book ai didi

PHP 依赖注入(inject) - fatal error

转载 作者:行者123 更新时间:2023-11-30 22:06:10 28 4
gpt4 key购买 nike

这里是新手开发者:)我第一次尝试实现依赖注入(inject)。我创建了与数据库连接的类:

<?php

class PDOClass
{
public function __construct($db, $host, $dbname, $port, $login, $password)
{
try
{
$this->pdo = new PDO($db.':host='.$host.';dbname='.$dbname.';port='. $port, $login, $password);
$this->pdo-> query ('SET NAMES utf8');
$this->pdo-> query ('SET CHARACTER_SET utf8_polish_ci');
$this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $e)
{
echo "<span style='color: red;'><strong>A database connection could not be established, try again later</strong></span><br>" . $e->getMessage();
}
echo "Works";
}
}

还有我的 index.php 文件:

<?php
require_once 'config.php';
require_once 'pdoclass.php';
require_once 'loginclass.php';

require_once 'lib/Twig/Autoloader.php';
Twig_Autoloader::register();
$loader = new Twig_Loader_Filesystem('views');
$twig = new Twig_Environment($loader);

$pdo = New PDOClass($db, $host, $dbname, $port, $login, $password);
$login = New LoginClass($pdo, $twig);

这是我的 LoginClass 发生错误的地方:

<?php
class LoginClass
{
function __construct($pdo, $twig)
{
$this->pdo = $pdo;
$this->twig = $twig;
}

public function log()
{
return $this->twig->render('logform.html.twig');
}

public function check($email, $password)
{
$stmt = $this->pdo->prepare('SELECT * FROM accounts WHERE email = :email AND password = :password');
$stmt->bindParam(':email', $email);
$stmt->bindParam(':password', $password);
$stmt->execute();
}
}

当我调用方法 log() 时它工作正常 - 它呈现 Twig 模板,但是当我想调用方法 check() 时我得到了 fatal error :

Fatal error: Call to a member function prepare() on null in E:\xampp\htdocs\test\loginclass.php on line 19

第 19 行是:

$stmt = $this->pdo->prepare('SELECT * FROM accounts WHERE email = :email AND password = :password');

谁能帮帮我?

最佳答案

你不应该包装 PDO。 PDO 本身具有使用它所需的一切功能。在这种情况下, fatal error 是因为您试图在 $this->pdo 上调用 prepare() 函数,就好像它是一个 PDO 实例一样,但它不是,因为您将它包装到一个(无用的)PDOClass 包装器中。

解决方案非常简单:移除包装器并直接将 pdo 对象传递给需要它的类。这就是依赖注入(inject)的意思。

关于PHP 依赖注入(inject) - fatal error ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41701380/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com