объявить собственность как объект? - PullRequest
16 голосов
/ 04 февраля 2010

Как объявить свойство класса как объект?

Я пытался:

 public $objectname = new $Object();

Но это не сработало. Кроме того, почему вы должны делать это так?

Не лучше ли просто создать экземпляр этого объекта и просто использовать его члены?

Ответы [ 4 ]

26 голосов
/ 04 февраля 2010

Из руководства 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;   
    }
}

или воспользуйтесь сеттерным впрыском.

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

Вы хотите отдать предпочтение агрегации над композицией .

1 голос
/ 04 февраля 2010

Если вы просто хотите создать экземпляр универсального класса, вы можете сделать:

$objectname = new stdClass;

Я не думаю, что вы можете сделать это в объявлении свойства, поэтому вам просто нужно объявить $ objectname и в конструкторе установить его в новый stdClass.

0 голосов
/ 21 февраля 2019

Вы можете создать новый класс в области конструктора, а затем установить его как новый объект.

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;
0 голосов
/ 04 февраля 2010

PHP не поддерживает явную типизацию членов класса. Так что вы не можете сказать:

public Object $objectname;

Если класс Object существует и вам нужен его экземпляр, попробуйте:

 public $objectname = new Object();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...