php - 用于 PHP 的 TeamSpeak API 更改的变量

标签 php api variables teamspeak

我正在为一个网站开发一个工具,我遇到了一个奇怪的问题,或者更好的是,一个奇怪的情况。

我正在使用下面的代码从 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 代表一个对象,其中包含所有需要的信息,以及一些让您从对象中获取数据的方法(或函数)。其中一些方法会对对象本身做不同的事情,以便检索特定方法调用所需的额外数据。

考虑以下简单对象:

  • 自行车
    • 颜色
    • 齿轮
    • 函数 __construct($color, $gears)
    • this.color = $color; this.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());

请注意,这将有效地使该变量的内存和处理器使用量翻倍。

关于php - 用于 PHP 的 TeamSpeak API 更改的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33743692/

相关文章:

php - 将 MySQL 导入 phpMyAdmin 时不断出现此错误

mysql - 在 CentOS 6.7 上编译 MySQL 5.6.30 - "Manually-specified variables were not used"

php - Symfony表单错误呈现

php - 如何使用 Doctrine 在 Symfony 中创建查询,从三个相关表中提取数据

windows - ExitCode -1073741502 是什么意思?

Java API 远程访问大型机

api - 使用 API 执行 Sitecore 工作流状态操作

java - 如何连接私有(private)方法和公共(public)方法之间的变量

c++ - 在 C++ 中声明变量而不指定其数据类型

php - 使用 php 的基于 Ajax jquery 的登录