我正在开发一个网站工具,我想出了一个奇怪的问题,或者更好,一个奇怪的情况。
我使用下面的代码从TeamSpeak服务器检索数据。我使用此信息在用户上构建个人资料。
form_for
现在,奇怪的情况是这个代码块的输出:
@item
(注意 print_r )
与此代码块的输出完全不同:
$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();
之后调用的函数(我在变量// 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();
中存储的输出)正在改变该变量的内容。也就是说,他们将输出附加到变量上。
我从来没有专业地学过PHP,我只是尝试一下......我错过了一些关于这种行为的语言吗?如果我是,我该怎么做才能阻止它?
谢谢大家。
答案 0 :(得分:1)
$ts3
表示包含所需信息的Object,以及一些允许您从对象获取数据的方法(或函数)。其中一些方法将对对象本身执行不同的操作,以便检索特定方法调用所需的其他数据。
考虑以下简单的对象:
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());
请注意,这将有效地使该变量的内存和处理器使用量翻倍。