Переменные, изменяемые TeamSpeak API для переполнения стека

Я разрабатываю инструмент для веб-сайта, и у меня возникла странная проблема или, что еще лучше, странная ситуация.

Я использую приведенный ниже код для извлечения данных с сервера TeamSpeak. Я использую эту информацию, чтобы создать профиль для пользователя.

$ts3 = TeamSpeak3::factory("serverquery://dadada:dadada@dadada:1234/");
// Get the clients list
$a=$ts3->clientList();
// Get the groups list
$b=$ts3->ServerGroupList();
// Get the channels list
$c=$ts3->channelList();

Теперь странная ситуация заключается в том, что вывод этого блока кода:

// Get the clients list
$a=$ts3->clientList();
// Get the groups list
$b=$ts3->ServerGroupList();
// Get the channels list
$c=$ts3->channelList();
echo "<pre>";print_r($a);die();

(Обратите внимание на print_r)
Полностью отличается от вывода этого блока кода:

// Get the clients list
$a=$ts3->clientList();
// Get the groups list
#$b=$ts3->ServerGroupList();
// Get the channels list
#$c=$ts3->channelList();
echo "<pre>";print_r($a);die();

Я имею в виду функции, которые я вызываю после clientList() (какой вывод я храню в переменной $a) меняют содержимое этой переменной. Это, они как бы добавляют свой вывод к переменной.

Я никогда не изучал PHP профессионально, я просто пробую его … Я что-то упускаю в этом языке, который оправдывает такое поведение? Если я, что я могу сделать, чтобы остановить это?

Спасибо вам всем.

5

Решение

$ts3 представляет объект, содержащий всю необходимую информацию, а также некоторые методы (или функции), которые позволяют получать данные из объекта. Некоторые из этих методов будут делать разные вещи с самим объектом, чтобы извлечь дополнительные данные, необходимые для конкретного вызова метода.

Рассмотрим следующий простой объект:

  • Велосипед
    • цвет
    • шестерни
    • функция __construct ($ color, $ gears)
    • this.color = $color; this.gears = $gears
    • обновление функции ()
    • this.headlight = true; this.gears = 10;

Теперь, когда вы впервые создаете его, он имеет только два свойства:

$myBike = new Bike('red',5);
// $myBike.color = 'red';
// $myBike.gears = 5;

…но после обновления свойства изменились, и добавились новые.

$myBike->upgrade();
// $myBike.color = 'red';
// $myBike.gears = 10;
// $myBike.headlight = true;

…но если вы хотите убедиться, что вы получаете копию, которая не изменится (т.е. не использует ссылки на данные $ts3 объект), клонировать переменную.

$a = clone($ts3->clientList());

Имейте в виду, это эффективно удвоит использование памяти и процессора для этой переменной.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]