как вызвать другой объект класса к другому классу, используя PHP - PullRequest
0 голосов
/ 07 мая 2018

У меня одна проблема. Мне нужно передать один объект класса другой функции класса с помощью PHP. Я объясняю мой код ниже.

db.php:

class DBOperations{
    // constructor
    private $conn;
    function __construct() {
        $this->connect();
    }
    // destructor
    function __destruct() {
        // $this->close();
    }
    public function prepare_param(){
        echo 'test';
    }
}
$dbo = new DBOperations();

newclass.php:

require_once('db.php');
class DBhandler
{

    function __construct()
    {

    }
    function __destruct() {
        // $this->close();
    }
    public function select_all_profile(){
        $output=$dbo->prepare_param();
    }
}
$dbh = new DBhandler();
print_r($dbh->select_all_profile());exit;

Здесь мне нужно передать объект DBOperations (i.e-$dbo) в функцию класса DBhandler, чтобы выполнить функцию первого класса, которая не выполняется. Пожалуйста, помогите мне решить эту проблему.

Ответы [ 4 ]

0 голосов
/ 07 мая 2018

Обычная конструкция для этого передаст значение DBOperations в конструктор класса DBhandler, поскольку его можно использовать несколько раз. Обычно это называется Dependency Injection (DI) и используется для настройки классов с любыми зависимостями, а не для их создания в каждом классе.

require_once('db.php');
class DBhandler
{
    private $dbo;
    function __construct( $dbo )
    {
        $this->dbo = $dbo;
    }
    function __destruct() {
        // $this->close();
    }
    public function select_all_profile(){
        $output=$this->dbo->prepare_param();
    }
}
$dbh = new DBhandler($dbo);
print_r($dbh->select_all_profile());
exit;
0 голосов
/ 07 мая 2018

ПРОВЕРЕНО И ИСПЫТАНО.

1-й: строка $this->connect(); в 1-м классе выдаст ошибку.

<?php
class DBOperations{
    // constructor
    private $conn;
    function __construct() {
        //$this->connect();  // I have commented it out.
    }
    // destructor
    function __destruct() {
        // $this->close();
    }
    public function prepare_param(){
        echo 'test';
    }
}
$dbo = new DBOperations();

class DBhandler
{

    function __construct()
    {

    }
    function __destruct() {
        // $this->close();
    }
    public function select_all_profile($dbo){
        $output=$dbo->prepare_param();
    }
}
$dbh = new DBhandler();
print_r($dbh->select_all_profile($dbo));exit;  // This will print 'test'
?>
0 голосов
/ 07 мая 2018

Вам не хватает переменной области вопроса. Вы создаете экземпляр DBOperations() в db.php, но эта переменная не будет доступна в классе в другом файле.

Вы должны действительно лучше создать экземпляр, чем просто в файле, но исправить проблему, передав ее в объекте DBOperations в DBhandler().

db.php:

class DBOperations{

    private $conn;

    function __construct() {
        $this->connect();
    }

    public function prepare_param(){
        echo 'test';
    }
}
$dbo = new DBOperations();

newclass.php:

require_once('db.php');

class DBhandler
{
    private $dbo;

    function __construct(DBOperations $dbo)
    {
        $this->dbo = $dbo;
    }

    public function select_all_profile(){
        $output = $this->dbo->prepare_param();
    }
}
$dbh = new DBhandler($dbo);
print_r($dbh->select_all_profile());exit;
0 голосов
/ 07 мая 2018

Require_once может некорректно работать внутри повторяющейся функции при сохранении переменной.

Чтобы переменная панель была доступна при каждом вызове функции, замените require один раз на require. например, ситуация: ссылка

...