PHP — добавить к объекту?

#php #append

#php #добавить

Вопрос:

У меня возникла проблема с добавлением к объекту.

Я получаю сообщение об ошибке:

 Uncaught Error: Cannot use object of type AnterisAutotaskAPIContactsContactEntity as array in...
  

Если он удаляет часть с операторами MobilPhone и Email if, он работает нормально.

Код:

 Create new contact
$contact = new AnterisAutotaskAPIContactsContactEntity([
'id' => 0, // Autotask requires that new entities have an ID of 0
'companyID' => intval($Companyid),
'firstName' => $Fornavn,
'lastName' => $Efternavn,
'isActive' => 1,
'phone' => $Telefon,
]);

Check if MobilPhone filled out
if (empty($MobilTelefon)) {
} else {
$contact['mobilePhone'] = $MobilTelefon;
}

Check if Email filled out
if (empty($Email)) {
} else {
$contact['emailAddress'] = $Email;
}

Create in Autotask
$client->contacts()->create( $contact );
  

Комментарии:

1. Ну, сообщение совершенно ясно, вы пытаетесь использовать объект в качестве массива, что является двумя разными вещами. Вы не показываете содержимое объекта Contact, поэтому трудно помочь, но если у вас есть свойства MobilePhone и EmailAddress в этом объекте. Тогда вам нужно будет установить свойство. Давайте предположим, что свойства существуют и являются общедоступными, вам нужно будет сделать что-то вроде $contact->emailAddress = $email вместо того, чтобы пытаться использовать его как массив.

Ответ №1:

В первой строке вы создаете экземпляр ContactEntity класса. $contact это переменная, которая содержит экземпляр класса. $contact теперь это объект.

Тем не менее, в строках, которые генерируют ошибку, вы используете объект как массив, что невозможно. Доступ к свойствам объекта осуществляется с помощью -> оператора. Доступ к элементам массива осуществляется с помощью [] нотации.

В исходном коде Anteris вы можете видеть, что в строке 42 mobilePhone определяется как public ?string $mobilePhone; . Свойство объекта.

Итак, в вашем коде вместо того, чтобы писать это:

$contact['mobilePhone'] = $MobilTelefon;

Вы должны написать это:

$contact->mobilePhone = $MobilTelefon;

То же самое относится и к другим переменным.

Комментарии:

1. Кроме того, вы можете переписать свои if (empty()) операторы, чтобы проверить, не являются ли они пустыми ( if (!empty($MobilTelefon)) { ... } , поэтому вам не нужно писать пустой блок, который ничего не делает!

2. Спасибо, теперь все работает идеально, и я переписал инструкции if 🙂