将属性声明为对象?

23

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

我尝试过:

 public $objectname = new $Object();

但它没起作用。此外,为什么你要那样做呢?

直接实例化那个对象并使用它的成员不是更好吗?

4个回答

30
PHP手册上的类属性(我强调)中可以看到:

类成员变量被称为“属性”。你可能也会看到它们被称为其他术语,比如“属性”或者“字段”,但是在本参考文档中我们将使用“属性”。它们通过使用关键字public、protected或private来定义,后面跟着一个普通的变量声明。这个声明可以包含一个初始化,但是这个初始化必须是一个常量值,也就是说,它必须能够在编译时被评估,并且不能依赖于运行时信息才能被评估。

要么在构造函数中创建它(组合

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

或者在构造函数中注入它(聚合
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
    }
}

你希望更偏向于聚合而非组合

2
聚合也被称为“依赖注入”,Fabien Potencier在这里有一篇关于它的教程:http://fabien.potencier.org/article/11/what-is-dependency-injection - The Pixel Developer

1
你可以在构造函数区域创建一个新的类,然后将其设置为新对象。
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;

1
如果你只是想实例化一个通用类,可以这样做:
$objectname = new stdClass;

我不相信你可以在属性的声明中这样做,所以你只能声明 $objectname,然后在构造函数中将其设置为 new stdClass。


-1

PHP不支持类成员的显式类型定义。因此,您无法这样说:

public Object $objectname;

如果类Object存在,并且您想要一个实例,请尝试:
 public $objectname = new Object();

3
这将导致一个致命错误,"常量表达式包含无效操作"。 - hassan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接