0

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

在每个类上创建构造函数只是为了设置初始私有类变量,这似乎有点过头了。

这是我想要实现的示例

<?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)

4

2 回答 2

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();
    }
}
于 2013-07-23T18:53:08.147 回答
0

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

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

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

于 2013-07-23T18:55:35.377 回答