我想获得一个现有对象的实例。如何在不将对象作为参数传递的情况下执行此操作?这就是我现在正在做的事情:
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)
我想我可以将每个对象作为父对象的属性,但是还有其他建议吗?
答案 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();