如何使用PHP将其他类对象调用到另一个类函数
我正在讨论一个问题。我需要使用PHP将一个类对象传递给另一个类函数。我在下面解释我的代码 db.php: newclass.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
这里我需要将
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;