php - 类构造函数干扰另一个类

标签 php class function variables constructor

本质上,我只是创建了两个类,其中一个类(在本例中为类 A)运行另一个类(在本例中为类 B)中的一个函数,以从数据库中获取一些信息。

但是,当 B_runtime() 实际调用数据库时,我收到错误消息 Cannot access protected property A::$db

我不明白的是,即使我在两个类中都有两个 __construct,PDO 语句仍然非常坚持使用来自 A 类的数据库连接。

我确信这与我从 A 类内部运行 B_runtime() 这一事实有关,因为如果我从 A 类外部调用它,则不会发生这种情况。

我知道我可以简单地将 A 类中的 protected $db; 更改为公共(public)变量,但是,我真的很好奇如何解决这个问题。

ob_start();
include('/config.php');
ob_end_clean();

$A = new A($db);
$B = new B($db);

echo $A->A_runtime();

class A{
    protected $db;
    public function __construct($db){
       $this->db = $db;
    }
    public function A_runtime(){
        return B::B_runtime();      
    }
}

class B{
    protected $db;
    public function __construct($db){
       $this->db = $db;
    }
    public function B_runtime(){
        $preparedStatement = $this->db->prepare('SELECT * FROM z_mod_html WHERE ModuleLink = :moduleid LIMIT 1');
        $preparedStatement->execute(array(':moduleid' => '1'));
        $rows = $preparedStatement->fetchAll();
        return $rows[0]['HTML'];
    }
}

抱歉,代码量太大 - 如果有人有任何想法或建议,我们将不胜感激。谢谢。

最佳答案

您可以将 B 的实例传递给该方法。通过这种方式,您还可以定义方法对类 B 的依赖性。

$A = new A($db);
$B = new B($db);

echo $A->A_runtime($B);

class A{
    //...
    public function A_runtime($instance){
        return $instance -> B_runtime();      
    }
}

您甚至可以使用 type hinting在 PHP 5 中表示您期望在那里有一个类 B 的实例:

    public function A_runtime(B $instance){

关于php - 类构造函数干扰另一个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10046528/

相关文章:

c - 函数参数中的静态关键字

javascript - 用于命名变量和函数的单个字母

php - 可以使用 PHP 扩展来调用 C++ DLL 吗?

php - 带有 PECL_HTTP 的 http_parse_headers

java - 从 main 之外的方法访问类对象

java - 为什么我们不能让当前类引用持有父类(super class)对象?

azure 函数logError慢

php-fpm : disabling a php extension for a specific pool

php - 使用php将数组值设置为变量

c++ - 如何从指向多态基类的指针复制/创建派生类实例?