webForumDet fria alternativet

klassvariabel bråkar

3 svar · 414 visningar · startad av Blixtsystems

BlixtsystemsMedlem sedan maj 2005713 inlägg
#1

Håller på med en parser och har en "Finite State Machine" som jag kör med för att göra processen lite smidigare.
Det har varit en mycket hjälpsam metod men nu har jag plötsligt kört fast.

Problemet består i att själva klassvariabeln som bestämmer vilket "state" man befinner sig i helt enkelt vägrar att låta sig sättas vid ett tillfälle.
I början av funktionen så sätts den problematiska variabeln $this->STATE en gång och det funkar alltid.
Sedan är det endast på ett ställe i en loop som jag måste uppdatera värdet vid varje iterering, och den kodsnutten som konfunderar mig:

$this->STATE=$a[$tok_key]["ds"];
echo "<br/>class:".$this->STATE."<br/>local:".$a[$tok_key]["ds"]."<br/>";

Normalt så får jag korrekt echo ...som exempel:
class:PLAYERNO
local:PLAYERNO

Men plötsligt runt den 20'e itereringen så dyker det upp följande output:
class:
local:PLAYERNO

Alltså innehåller $a[$tok_key]["ds"] korrekt värde men av någon anledning så finns det inte i $this->STATE raden efter jag satt värdet.
$this->STATE ger även negativt resultat om jag testar med en isset()

Jag kan posta hela koden om det kan någon tror att den orkar titta igenom den och se om de kan hitta problemet, men det förbluffar mig att det överhuvudtaget är möjligt att variabeln kan vara tom raden efter jag satt den, och endast ungefär den 20'e gången jag kallar funktionen.

Jag har inte kört med OOP speciellt mycket i just PHP tidigare och undrar vad jag kan ha missat som gör att klassvariabler plötsligt slutar existera.

itpastornMedlem sedan feb. 2007280 inlägg
#2

Du måste nog visa oss mer kod...

BlixtsystemsMedlem sedan maj 2005713 inlägg
#3

Tack så mycket!

Jag skulle rensa upp lite får att få ihop ett överskådligt exempel över de tre inblandade klasserna och då jag höll på med det så hittade jag boven.

Hur och varför det var ett problem har jag ingen aning om dock.
Varje kommando jag skickar till parsern kan kalla en funktion i huvudklassen.
I detta fallet sätter jag i den funktionen en klassvariabel för huvudklassen (som instantierar parserklassen, dock utan någon nedärvning).
"$this->$playerName=$str"
Utan den biten så behåller parserklassen värdet på $STATE

Missen jag gjort är att då en klassvariabel visat sig vara tom om jag refererat till den som "$this->playerName" så har jag slängt dit ett dollartecken.
Det har funkat men kan tydligen skapa mystiska problem som i detta fallet.
Börjar jag min klassvariabel med en versal så funkar det utan dollartecken har jag dock märkt....men enligt PHP manualen skall så inte vara fallet med PHP4 som jag kör med:
http://se.php.net/manual/en/language.oop.php

Aningen förvirrade detta med OOP och PHP hittills måste jag säga :l

itpastornMedlem sedan feb. 2007280 inlägg
#4

"Förvirrande" på PHP 4 - det minsta man kan säga!

Skall du koda OO, gör dig själv en stor tjänst och byt till femman!

Genererad på 360 ms · cache AV · v20260730165559-full.f96bc7eb