Как получить доступ к элементу объекта в php? Есть переменная, допустим $a. Вот вывод ее значения в var_dump:object(TrackableObject)#67 (4) {
["storage":"TrackableObject":private]=> array(34) {
["direction"]=> string(7) "inbound"
["callstatus"]=> string(7) "ringing"
["starttime"]=> string(19) "2018-05-20 15:27:07"
["endtime"]=> string(0) ""
["totalduration"]=> NULL
["billduration"]=> string(0) ""
["recordingurl"]=> string(0) ""
["sourceuuid"]=> string(47) "in_287e79670fc6de7285a5aadfd9b04e06_105"
["gateway"]=> string(0) ""
["customer"]=> string(3) "365"
["user"]=> string(1) "1"
["customernumber"]=> string(11) "79130000000"
["customertype"]=> string(8) "Contacts"
["incominglinename"]=> string(0) ""
["assigned_user_id"]=> string(0) ""
["createdtime"]=> string(19) "2018-05-20 11:27:08"
["modifiedtime"]=> string(19) "2018-05-20 11:27:08"
["source"]=> string(0) ""
["created_user_id"]=> string(0) ""
["sp_is_local_cached"]=> string(0) ""
["sp_recordingurl"]=> string(0) ""
["sp_is_recorded"]=> string(0) ""
["sp_recorded_call_id"]=> NULL
["sp_voip_provider"]=> string(7) "provider"
["sp_call_status_code"]=> NULL
["sp_called_from_number"]=> string(11) "70000000000"
["sp_called_to_number"]=> string(11) "70000000000"
["starred"]=> string(0) ""
["tags"]=> string(0) ""
["sp_is_recorder"]=> NULL
["sp_billduration"]=> NULL
["label"]=> string(11) "70000000000"
["modifiedby"]=> string(1) "1"
["id"]=> int(377)
}
["trackingEnabled":"TrackableObject":private]=> bool(true)
["tracking":"TrackableObject":private]=> bool(true)
["changed"]=> array(1) {
[0]=> string(2) "id"
}
}
Не знаю какой код php написать, чтобы дойти до объекта ["storage":"TrackableObject":private] для получения значение элемента массива customernumber. Конструкция $a->storage["customernumber"] не работает. Как правильно это сделать?

21 Авг 2019 в 07:00
206 +1
0
Ответы
1

Чтобы получить доступ к элементу объекта, который находится в закрытом свойстве, можно использовать методы доступа (геттеры и сеттеры).

Например, если у вас есть класс TrackableObject, который содержит закрытое свойство storage, вы можете создать метод getStorage() для доступа к значению этого свойства:

class TrackableObject {
private $storage;
public function getStorage() {
return $this->storage;
}
}
$a = new TrackableObject();
$storage = $a->getStorage();
// Теперь у вас есть доступ к элементу массива customernumber
$customernumber = $storage["customernumber"];

Если у вас нет возможности изменять класс TrackableObject, вы можете использовать рефлексию для доступа к закрытым свойствам:

$reflection = new ReflectionClass($a);
$storageProperty = $reflection->getProperty('storage');
$storageProperty->setAccessible(true);
$storage = $storageProperty->getValue($a);
$customernumber = $storage["customernumber"];

Помните, что использование рефлексии не рекомендуется из-за его сложности и потенциальной уязвимости безопасности. Вместо этого рекомендуется обращаться к разработчику класса для предоставления доступа к закрытым свойствам через методы.

20 Апр в 13:10
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 718 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир