在不使用构造函数的情况下分配新的类变量?

时间:2013-07-23 18:51:10

标签: php oop

我想知道我是否可以在不制作构造函数的情况下以某种方式分配新变量。

为了设置初始私有类变量,在每个类上创建构造函数似乎相当大。

这是我想要实现的例子

<?php

class MyClass {
    public function DoSomething() {
        echo '1';
    }
}

class MySecondClass {
    private $obj = new MyClass(); // Error

    /*
        // This works, but I don't like it, I think it's total overkill
        function __construct() {
            $this->obj = new MyClass();
        }
    */

    public function PrintOne() {
        $this->obj->DoSomething();
    }
}

$class = new MySecondClass();
$class->PrintOne();

就是这样,这里的错误信息非常清楚

  

语法错误,第10行意外'新'(T_NEW)

2 个答案:

答案 0 :(得分:2)

你不能(我知道),你需要在构造函数中实例化它(选项A),或者传入对象(选项B)。

选项A:

class MySecondClass {
    private $obj;

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

    public function PrintOne() {
        $this->obj->DoSomething();
    }
}

选项B:

class MySecondClass {
    private $obj;

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

    public function PrintOne() {
        $this->obj->DoSomething();
    }
}

答案 1 :(得分:0)

你不能那样做。您可以初始化属性,但它们必须是常量值,而不是函数的结果或尝试实例化类。

http://www.php.net/manual/en/language.oop5.properties.php

IMO,您不应该在类的构造函数中实例化新对象。您应该将它们作为创建对象的参数传递。