如何使用PHP将其他类对象调用到另一个类函数

如何使用PHP将其他类对象调用到另一个类函数,php,class,oop,database-connection,Php,Class,Oop,Database Connection,我正在讨论一个问题。我需要使用PHP将一个类对象传递给另一个类函数。我在下面解释我的代码 db.php: newclass.php: 这里我需要将DBOperations对象(I.e-$dbo)传递给DBhandler类函数,以执行未发生的第一个类函数。请帮助我解决此问题。存储变量时,Require\u once可能无法在重复函数中正常工作 要确保变量栏在每次函数调用时可用,请将require替换为require。例如情况:尝试和测试 第1行:行$this->connect()将给出错误 &l

我正在讨论一个问题。我需要使用PHP将一个类对象传递给另一个类函数。我在下面解释我的代码

db.php:

newclass.php:


这里我需要将
DBOperations
对象(
I.e-$dbo
)传递给
DBhandler
类函数,以执行未发生的第一个类函数。请帮助我解决此问题。

存储变量时,Require\u once可能无法在重复函数中正常工作

要确保变量栏在每次函数调用时可用,请将require替换为require。例如情况:

尝试和测试

第1行:行
$this->connect()将给出错误

<?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'
?>

您缺少变量范围问题。您在db.php中实例化了
DBOperations()
,但该变量在另一个文件的类中不可用

您确实应该更好地实例化,而不仅仅是在文件中,而是将
DBOperations
对象中的问题传递到
DBhandler()

db.php:

newclass.php:


一个通用的构造会将DBOperations值传递给DBhandler类的构造函数,因为它可以重复使用多次。这通常称为依赖项注入(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;

它是否有错误?您传递的是正确的。有什么错误吗?你打开错误报告了吗
DBOperations
没有在构造函数中调用的
connect()
函数。是的,它的
注意:未定义变量:dbo
。但是您更新的问题现在没有传递
dbo
变量。是,如果我已经包含页面,并且在第二类的公共函数中,我无法访问第一类对象。不,同样的问题在根据您进行更改后也会出现。已经包含页面,并且在第二类的公共函数中,我无法访问第一类对象。您测试过吗?其抛出
警告:缺少DBhandler::\uu construct(),
的参数1。这应该是
$dbh=newdbhandler($dbo)中的
$dbo
<?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'
?>
class DBOperations{

    private $conn;

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

    public function prepare_param(){
        echo 'test';
    }
}
$dbo = new DBOperations();
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;
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;