将属性声明为对象?

时间:2010-02-04 20:34:57

标签: php oop class

如何将类属性声明为对象?

我试过了:

 public $objectname = new $Object();

但它没有用。另外,你为什么要这样做呢?

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

4 个答案:

答案 0 :(得分:26)

来自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;   
    }
}

或使用二传手注射。

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

您想要favor aggregation over composition

答案 1 :(得分:1)

如果您只是想要实例化一个泛型类,您可以这样做:

$objectname = new stdClass;

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

答案 2 :(得分:0)

PHP不支持显式输入类成员。所以你不能说:

public Object $objectname;

如果类Object存在,并且您想要它的实例,请尝试:

 public $objectname = new Object();

答案 3 :(得分:0)

您可以在构造器区域中创建一个新类,然后将其设置为新对象。

class CampaignGroupsProperty
{
    public $id;
    public $name;
}



class GetCampaignGroupsResponse
{
    public $result;
    public $resultCode;

    public $campaignGroups;

    public function __construct()
    {
        $this->campaignGroups = new CampaignGroupsProperty();
    }
}

然后您可以像

那样称呼它
$response = new GetCampaignGroupsResponse();
$response->campaignGroups->id = 'whatever';
$response->result=true;