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

时间:2011-11-01 14:47:03

标签: php oop

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

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)

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

2 个答案:

答案 0 :(得分:2)

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

你应该完全将对象作为参数传递,以避免引入隐式依赖,并做好OOP。

阅读依赖注入

如果对象创建变得复杂或烦人,您可以随时使用Dependency Injection Container

答案 1 :(得分:0)

你应该使用单身模式:

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();