【发布时间】:2011-01-13 06:21:22
【问题描述】:
如何将类属性声明为对象?
我试过了:
public $objectname = new $Object();
但它没有用。另外,你为什么要那样做?
仅实例化该对象并仅使用其成员不是更好吗?
【问题讨论】:
如何将类属性声明为对象?
我试过了:
public $objectname = new $Object();
但它没有用。另外,你为什么要那样做?
仅实例化该对象并仅使用其成员不是更好吗?
【问题讨论】:
PHP 不支持类成员的显式类型。所以你不能说:
public Object $objectname;
如果类 Object 存在,并且您想要它的实例,请尝试:
public $objectname = new Object();
【讨论】:
来自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
}
}
【讨论】:
如果你只是想实例化一个泛型类,你可以这样做:
$objectname = new stdClass;
我不相信您可以在属性声明中执行此操作,因此您只需声明 $objectname 并在构造函数中将其设置为新的 stdClass。
【讨论】:
您可以在构造器区域创建一个新类,然后将其设置为新对象。
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;
【讨论】: