【问题标题】:How to get data from parent class (not extend)如何从父类获取数据(不扩展)
【发布时间】:2014-10-24 20:42:48
【问题描述】:

这里是示例代码:

namespace myApp

class app
{
    private $pdo = null;

    public function __construct() {
        $this->user=new User();
        $this->user->getPDO();
    }
}

class User
{
    public function getPDO() {
        //get PDO from app class
    }
}

如何从用户类得到$pdo 从应用类? 由于应用程序类中的构造,无法使用扩展。 我不想声明独立的类(应用程序和用户),而不是使用全局来相互通信。

编辑: 这个解决方案可以吗? 命名空间 myApp

class app
{
    public $pdo = null;

    public function __construct() {
        $this->user=new User($this);
        $this->user->getPDO();
    }
}

class User
{
    private $app=null;

    public function __construct($app) {
        $this->app=$app;
    }
    public function getPDO() {
        return $this->app->pdo;
    }
}

【问题讨论】:

  • new User($this->pdo)?
  • 如果$pdoapp 类的private 属性,为什么User 应该访问它?
  • @Fractaliste 为什么不呢?它被称为abstractionprivate 变量可以让你隐藏类的内部,而public 方法可以让你以你想要的方式操作这些私有变量。

标签: php


【解决方案1】:

这听起来像是依赖注入的良好候选者。

您可以为您的用户类声明构造函数,例如

__constuct($pdo) {
  $this->pdo = $pdo;
}

然后创建用户喜欢

$this->user = new User($this->pdo)

这样做的另一个好处是,当您想要测试您的代码时,您可以轻松地模拟 pdo 和测试用户,而无需执行实际的数据库操作。

【讨论】:

    【解决方案2】:

    您必须像这样在您的应用程序类中声明 2 个函数:

    然后你可以通过这个函数访问 pdo 变量

    public function setPDO($pdo) {
        $this->pdo = $pdo;
    }
    
    public function getPDO() {
        return $this->pdo;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-06
      • 2014-12-13
      • 2019-08-11
      • 1970-01-01
      • 2021-10-27
      • 1970-01-01
      • 2012-02-11
      • 2020-08-03
      相关资源
      最近更新 更多