PHP OOP(PDO)的问题

PHP OOP(PDO)的问题,php,oop,pdo,Php,Oop,Pdo,我是PHP OOP新手,所以我在里面做了一个小游戏,让你猜一个数字。现在,如果你做对了,我想在数据库中添加一些分数 我试过很多方法让它工作,但就是不行。另外,由于我不明白的原因,它没有重新确认我的$db variabel。我在谷歌上搜索了好几个小时,但找不到它。所以请帮帮我^^ 当我获胜时,我得到的错误: Notice: Undefined variable: db in C:\xampp\htdocs\numbergame\class\game.php on line 14 Fatal er

我是PHP OOP新手,所以我在里面做了一个小游戏,让你猜一个数字。现在,如果你做对了,我想在数据库中添加一些分数

我试过很多方法让它工作,但就是不行。另外,由于我不明白的原因,它没有重新确认我的$db variabel。我在谷歌上搜索了好几个小时,但找不到它。所以请帮帮我^^ 当我获胜时,我得到的错误:

Notice: Undefined variable: db in C:\xampp\htdocs\numbergame\class\game.php on line 14

Fatal error: Call to a member function execute() on a non-object in C:\xampp\htdocs\numbergame\class\game.php on line 14
DB.php:

<?php
try {
    $db = new PDO('mysql:host=localhost;dbname=numbergame', 'root', '');
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

} catch(PDOException $e) {
    echo 'ERROR: ' . $e->getMessage();
}
?>

game.php:

<?php
include('/DB.php');
class game {

public $rand;
public $num;

public function __construct() {
    $this->rand = mt_rand(1, 2);

}
public function addScore() {
    $sql = "UPDATE user SET score = '1' WHERE name = 'Dieter'";
    $db->execute($sql);
}
public function guess() {
    $this->num = $_POST["num"];
    if($this->num == $this->rand) {
        echo "You won! With the number: ".$this->rand."<br />";
        echo "Added score with 1";
        $this->addScore();
    } else {
        echo "You lose! The number was: 1";
}
}
public function check() {
    if($_SERVER['REQUEST_METHOD'] == "POST") {
    $this->guess();
    } else {
        echo '<form action="index.php" method="POST">';
        echo 'Guess a number between 1-10 <br />';
        echo '<input type="text" name="num" ><br />';
        echo '<input type="submit" value="go!">';
        echo '</form>';
    }
    }



    }

?>

您没有提到确切的问题是什么,但这是错误的:

public function addScore() {
    $sql = "UPDATE user SET score = '1' WHERE name = 'Dieter'";
    $db->execute($sql);
}

$db
未在方法的范围内定义,请参阅。

在OOP中,您无权访问所有变量。因此,您必须将
$db
var传递给对象

protected $_db;

public function __construct($db) {
    $this->_db = $db;
    ...
}

public function addScore() {
    $sql = "UPDATE user SET score = '1' WHERE name = 'Dieter'";
    $this->_db->execute($sql);
}
将其传递给对象:

include('/DB.php');

$NumberGame = new game($db);

如果您在类中使用include,并最终得到类似的结果:

$db = new DB();

class Car
{

    public function getCars()
    {
        return $db->query("SELECT * FROM cars");
    }
}
方法
getCars()
中的
$db
变量完全未知-它不在方法(类)范围内

正确的方法(多种方法之一):

当你有这样的东西时:

class Car
{

    public function __construct(DB $db)
    {
        $this->db = $db;
    }

    public function getCars()
    {
        return $this->db->query("SELECT * FROM cars");
    }
}

您得到的错误是什么?在
addScore()
中,
$db
变量是如何变得可用的?它是变量范围。您在类中使用的是
$db
,但其中没有定义它,因此您使用的是局部变量。这个问题似乎与主题无关,因为它是关于调试代码的。@redreggae:这是因为99%的问题都与主题无关。。。“为我调试”并不是专家的工作。这是IDE/编译器的工作。
$db = new DB();

$car = new Car($db);
print_r($car->getCars());
class Car
{

    public function __construct(DB $db)
    {
        $this->db = $db;
    }

    public function getCars()
    {
        return $this->db->query("SELECT * FROM cars");
    }
}