2010-02-04 80 views
14

你如何声明一个类属性作为一个对象?将属性声明为对象?

我想:

public $objectname = new $Object(); 

但没有奏效。另外,你为什么要这样做?

只是实例化该对象并使用其成员不是更好吗?

回答

24

PHP manual on class properties(重点煤矿):

类成员变量被称为“属性”。您也可以使用其他术语(如“属性”或“字段”)来查看它们,但出于此参考的目的,我们将使用“属性”。它们是通过使用关键字public,protected或private之一来定义的,后面跟着一个正常的变量声明。这个声明可能包含一个初始化,但是这个初始化必须是一个常量值 - 也就是说,它必须能够在编译时进行评估,并且不能依赖运行时信息进行评估。

要么构造(composition

class Foo 
{ 
    protected $bar; 
    public function __construct() 
    { 
     $this->bar = new Bar; 
    } 
} 

inject它在构造(aggregation

class Foo 
{ 
    protected $bar; 
    public function __construct(Bar $bar) 
    { 
     $this->bar = $bar; 
    } 
} 

,或者使用setter注入内部创建它。

class Foo 
{ 
    protected $bar; 
    public function setBar(Bar $bar) 
    { 
     $this->bar = $bar 
    } 
} 

你想要favor aggregation over composition

+2

聚集也被称为“依赖注入”,Fabien Potencier在这里有一个教程:http://fabien.potencier.org/article/11 /什么,是依赖注入 – 2010-02-05 03:28:55

1

PHP不支持对类成员的显式类型化。所以你不能说:

public Object $objectname; 

如果该类Object存在,你想它的一个实例,请尝试:

public $objectname = new Object(); 
+2

这会产生一个致命错误,“常量表达式包含无效操作” – hassan 2017-02-18 07:35:45

1

如果你只是寻找实例化一个泛型类,你可以这样做:

$objectname = new stdClass; 

我不相信你可以在属性的声明中这样做,所以你不得不只需要声明$ objectname并在构造函数中将其设置为新的stdClass。