Как получить доступ к элементу объекта в 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
225 +2
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 Апр 2024 в 13:10
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир