PDA

Volledige versie bekijken : Static Function?


JStas
%Europe/Berlin %639 %2005, 16:21
Hallo allemaal

Zit met het volgende probleempje. Heb een class aangemaakt met daarin allemaal static functions. Ik kan vanuit mijn anderes classes al de static functions aanroepen maar als ik bv vanuit een static function een andere functie aanroep die dat gewoon in dezelfde class staat krijg ik de foutmelding: Instance variables cannot be accessed in static functions.. Heb reeds heel wa fora afgeschuimd maar nergens kunnen ze er blijkbaar een uitleg voor vinden. Hopelijk kan het hier wel ;)

Voorbeeld van de class:
class Agent{
public static function getData(par1,par2):Void{
testCase();
}
public function testCase():Void{
trace("Test");
}
}

Kan er iemand wat licht in in deze donkere tunnel brengen?

Dauntless
%Europe/Berlin %672 %2005, 17:07
In dit geval is testCase(); een instance method. Vanuit statische (class methods) kan je alleen verwijzen naar andere class methods ( of class properties). Als je van testCase() ook een static function maakt, dan werkt het.

Als je van die testCase() geen static functie wil maken, moet je toch nog maar eens goed nadenken over de architectuur van je class :)

Voetsjoeba
%Europe/Berlin %680 %2005, 17:19
Hier zit je met een denkfout. Een classe is een blueprint voor een instance. Dat wil echter niet zeggen dat die blueprint zelf geen properties kan hebben. In een classe kun je members definieren die ofwel van de classe zelf zijn, ofwel van de instances die via die classe gemaakt worden. Omdat het laatste is waar classes vooral voor dienen, moet je om het andere te stellen gebruik maken van het keyword 'static'. Die members bestaan dan alleen in de classe, en hebben niets te maken met de instances die door middel van die classe gemaakt worden.

In jouw voorbeeld is testCase een functie die bestaat in de instances. Maar je roept die functie aan vanuit een statische functie. Een statische functie kan nooit toegang hebben tot een instance, omdat een statische functie niet bestaat in instances. Ze bestaat in de classe en daar roep je ze aan, maar die classe heeft geen functie testCase. Alleen de instances van die classe hebben dat.

Lees eens door deze dikke turf: http://www.kirupa.com/developer/oop2/AS2OOPindex.htm. Als je daar mee klaar bent, zul je precies weten hoe alles werkt.

Dauntless
%Europe/Berlin %711 %2005, 18:04
Leuk uitgelegd, Voets :)

Roenes
%Europe/Berlin %876 %2005, 22:01
Komt er eindelijk weer eens een leuke AS2 vraag, ben ik aan de late kant :(

Maar goede en duidelijke uitleg Voetsjoeba :)

JStas
%Europe/Berlin %370 %2005, 09:53
Thnx a lot!

Ik gebruik deze class om een paar mc's in mijn view class te animeren. Als gevolg van een bepaalde handeling moeten er bepaalde componenten bij op de geanimeerde mc's komen te staan (textfield,label,...). Is het een propere manier om dan de static function een boolean terug te sturen naar mijn view class en op basis van die waarde een nieuwe static functie aanroepen in mijn animatie class??

Bedankt ook voor de link naar "die turf" van een tutorial :)

Dauntless
%Europe/Berlin %646 %2005, 16:30
Kan je niet een instance aanmaken van je class en dan gewone, niet static methods gebruiken?

En je kan een static function een bool laten terug sturen ja (gewoon return true; ) of je kan de EventDispatcher class gebruiken, maar da's misschien een beetje overkill ?