繁体   English   中英

PHP OOP - 将对象的实例转换为另一个类

[英]PHP OOP - getting instance of object into another class

我想获得一个现有对象的实例。 如何在不将对象作为参数传递的情况下执行此操作? 这就是我现在正在做的事情:

class clas1 {
    public $myArray;

    public function setArray($a){
        $this->myArray = $a;
    }
}

class clas2 {
    public $test;

    function __construct($obj) {
        $this->test = $obj;
    }
}

$c = new clas1;
$c->setArray(array('firstname'=>'Fred'));

$c2 = new clas2($c);

var_dump($c2);

var_dump的输出是:

object(clas2)[2]
  public 'test' => 
    object(clas1)[1]
      public 'myArray' => 
        array
          'firstname' => string 'Fred' (length=4)

我想我可以将每个对象作为父对象的属性,但是还有其他建议吗?

通过调用静态方法(如单例)来拉取对象是一种不好的做法(甚至是反模式)。 单例和静态类对于新手来说是自然的,因为它们的工作方式与我们在程序范例中学到的方式相同,但你应该避免它们(只有在没有状态时才使用静态类)

您应该完全将对象作为参数传递,以避免引入隐式依赖项,并执行良好的OOP。

阅读有关依赖注入的信息

如果对象创建变得复杂或烦人,您始终可以使用依赖注入容器

你应该使用sigleton模式:

class class1
{
    private static $_instance;
    public static function getInstance()
    {
        if (is_null(self::$_instance)) {
            self::$_instance = new self;
        }
        return self::$_instance;
    }
    private function __construct() {}
    private function __clone() {}
}

class class2 {
    public function __construct()
    {
        $obj = class1::getInstance();
    }
}

$a = class1::getInstance();
$b = new class2();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM