TeamSpeak API 为 PHP 更改的变量
Variables being changed by TeamSpeak API for PHP
我正在为一个网站开发一个工具,我遇到了一个奇怪的问题,或者更好的是,一个奇怪的情况。
我正在使用下面的代码从 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 专业知识,我只是尝试一下...我是否缺少关于这种语言的某些东西来证明这种行为是合理的?如果我是,我能做些什么来阻止它?
谢谢大家
您看到了面向对象编程"Object" 的部分内容
$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());
请注意,这将有效地使该变量的内存和处理器使用量翻倍。
我正在为一个网站开发一个工具,我遇到了一个奇怪的问题,或者更好的是,一个奇怪的情况。
我正在使用下面的代码从 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 专业知识,我只是尝试一下...我是否缺少关于这种语言的某些东西来证明这种行为是合理的?如果我是,我能做些什么来阻止它?
谢谢大家
您看到了面向对象编程"Object" 的部分内容
$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());
请注意,这将有效地使该变量的内存和处理器使用量翻倍。