Я разрабатываю инструмент для веб-сайта, и у меня возникла странная проблема или, что еще лучше, странная ситуация.
Я использую приведенный ниже код для извлечения данных с сервера 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 профессионально, я просто пробую его … Я что-то упускаю в этом языке, который оправдывает такое поведение? Если я, что я могу сделать, чтобы остановить это?
Спасибо вам всем.
$ts3
представляет объект, содержащий всю необходимую информацию, а также некоторые методы (или функции), которые позволяют получать данные из объекта. Некоторые из этих методов будут делать разные вещи с самим объектом, чтобы извлечь дополнительные данные, необходимые для конкретного вызова метода.
Рассмотрим следующий простой объект:
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());
Имейте в виду, это эффективно удвоит использование памяти и процессора для этой переменной.
Других решений пока нет …