2015-11-16 2 views
5

Ich entwickle ein Tool für eine Website und ich kam mit einem seltsamen Problem, oder besser, einer seltsamen Situation.Variablen, die von TeamSpeak API für PHP geändert werden

Ich verwende den folgenden Code, um Daten vom TeamSpeak-Server abzurufen. Ich verwende diese Informationen, um ein Profil für einen Benutzer zu erstellen.

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

Nun ist die merkwürdige Situation, dass die Ausgabe dieses Codeblock:

// 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(); 

(Beachten Sie die print_r)
ist völlig verschieden von der Ausgabe dieses Codeblock:

// 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(); 

Was ich meine ist, die Funktionen, die ich nach clientList() aufrufen (die aus put I store in der Variablen $a) ändern den Inhalt dieser Variablen. Das heißt, sie hängen ihre Ausgabe an die Variable an.

Ich habe PHP noch nie professionell gelernt, ich probiere es einfach aus ... Fehle ich etwas an dieser Sprache, die dieses Verhalten rechtfertigt? Wenn ich bin, was kann ich tun, um es zu stoppen?

Danke euch allen.

+0

Immer noch Probleme? – naurel

+0

Ja. Es ist nicht etwas, was ich wirklich brauche, d. H. Ich denke an etwas anderes, das mein Problem lösen wird, aber ich würde wirklich gerne verstehen, was hier vor sich geht. –

+0

Gerade getestet und festgestellt, dass ich das gleiche Problem habe. Ich habe diese API für eine Weile verwendet und es ist das erste Mal, dass ich es sehe. Ich werde es mir ansehen. – naurel

Antwort

1

Sie sind Teile des „Objekt“ in Objektorientierte Programmierung

$ts3 sehen repräsentiert ein Objekt benötigt alle Informationen enthält, zusammen mit einigen Methoden (oder Funktionen), die Sie Daten aus dem Objekt erhalten lassen. Einige dieser Methoden werden verschiedene Dinge für das Objekt selbst tun, um zusätzliche Daten zu erhalten, die für einen bestimmten Methodenaufruf benötigt werden.

Betrachten Sie das folgende einfache Objekt:

  • Bike
    • Farbe
    • Getriebe
    • Funktion __construct ($ Farbe, $ Getriebe)
    • this.color = $color; this.gears = $gears
    • Funktion Upgrade()
    • this.headlight = true; this.gears = 10;

Nun, wenn Sie es zuerst schaffen, hat es nur zwei Eigenschaften:

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

... aber wenn Sie ein Upgrade, Eigenschaften haben sich geändert, und neue hinzugefügt werden.

Objekte übergeben normalerweise Referenzen, anstatt Daten zu kopieren, um Speicher zu sparen.

... Wenn Sie jedoch sicherstellen möchten, dass Sie eine Kopie erhalten, die sich nicht ändert (d. H. Keine Datenverweise auf das Objekt $ts3), klonen Sie die Variable.

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

Achtung, dies verdoppelt effektiv die Speicher- und Prozessorauslastung für diese Variable.

+0

Ich glaube, Sie haben Recht, und das ist in der Tat der Fall. Ich werde das testen, wenn ich die Zeit habe, um sicherzugehen. Vielen Dank :) –

Verwandte Themen