Почему мой класс не находит переменную вне другого класса - PullRequest
0 голосов
/ 19 марта 2020

Я новичок в OOP, почему мой класс в другом файле не находит переменную из другого класса, который я включаю ..? Я попытался отправить переменную $ db, но это дает мне ошибки.

Первый класс

<?php
//making Database connection
class DBconnection
{
    public function __construct()
    {
        DEFINE("DB_USER", "root"); // username database
        DEFINE("DB_PASS", ""); // password database
        try {
            $db = new PDO("mysql:host=localhost;dbname=php_opdracht2", DB_USER, DB_PASS); //host & database name
            $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            echo "Connected successfully";

        } catch (PDOException $e) {
            echo $e->getMessage();
        }
    }
}
//running the class DBconnection
$obj = new DBconnection();

Второй класс (другой файл. php)

<?php
//getting the database connection
require_once('DBconnection.php');

//getting the data from the database
class Controller
{
    public function processing()
    {
        try {
            $query   = "SELECT * FROM information";
            $sth     = $db->query($query); //why does it not find $db..
        } catch (PDOException $e) {
            echo $e->getMessage();
        }
    }
}
$obj3 = new Controller();
$obj3->processing();

1 Ответ

1 голос
/ 19 марта 2020

В вашем классе DBconnection объявите переменную publi c для хранения соединения с базой данных

<?php

//making Database connection
class DBconnection {

    public $db;

    public function __construct() {
        DEFINE("DB_USER", "root"); // username database
        DEFINE("DB_PASS", ""); // password database
        try {
            $this->db = new PDO("mysql:host=localhost;dbname=php_opdracht2", DB_USER, DB_PASS); //host & database name
            $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            echo "Connected successfully";
        } catch (PDOException $e) {
            echo $e->getMessage();
        }
    }

}

Затем в другом классе получите доступ к нему следующим образом

<?php

//getting the database connection
require_once('DBconnection.php');

//getting the data from the database
class Controller {

    public function processing() {
        try {
            $connection = new DBconnection(); #call db class
            $query = "SELECT * FROM information";
            $sth = $connection->db->query($query); //access the db variable created in db class
        } catch (PDOException $e) {
            echo $e->getMessage();
        }
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...