我们可以在对象调用中传递一个对象作为参数吗?

时间:2016-03-25 12:50:06

标签: php

我在某处读到了

  

构造函数的参数可以是除它所属的类之外的任何类型。

所以

$obj = new class_name(new class_name());

这是PHP允许的吗?

1 个答案:

答案 0 :(得分:4)

好了,我们为什么不运行代码并逐步完成所发生的事情呢?

因此,如果类接受构造函数的参数,这意味着它必须看起来像这样:

class A {
    public function __construct($parameter){

    }
}

现在我们创建一个它的实例:

$o = new A(new A);

但是这个论点还需要一个实例:

$o = new A(new A(new A));    

但是这个论点还需要一个实例:

$o = new A(new A(new A(new A)));  

但是这个论点还需要一个实例:

$o = new A(new A(new A(new A(new A))));  

但是这个论点还需要一个实例:

$o = new A(new A(new A(new A(new A(new A)))));  

但是这个论点还需要一个实例:

$o = new A(new A(new A(new A(new A(new A(new A))))));  

......现在等我输了。

救援来了"default argument values"!正如VolkerK在评论中已经指出的那样并非不可能,你只需确保以某种方式在某个地方结束链条。而且不知何故有默认值,例如

class A {
    public function __construct($parameter = NULL){

    }
}

因此,使用默认值,当你没有将另一个实例传递给构造函数时,链将结束,它将采用默认值,这里将是NULL