Flash CS3,
AJAX und PHP
Flash CS3,
AJAX und PHP
Ein Imprint von Pearson Education
München • Boston • San Francisco • Harlow,England
Don Mills,Onta...
Bibliografische Information Der Deutschen Bibliothek
Die Deutsche Bibliothek verzeichnet diese Publikation in der
Deutsche...
V
INHALTSVERZEICHNIS
Sieh' einer an … IX
Kapitel 1 Einleitung 1
Kapitel 2 Grundlagen der Programmierung 5
2.1 Programmieru...
VI
2.7 Schleifen 31
2.7.1 for-Schleife 31
2.7.2 for...each- oder for...in-Schleife 37
2.7.3 do..while-Schleife 39
2.7.4 wh...
VII
4.4 Flash vs. AJAX 164
4.5 Flash & AJAX 165
Kapitel 5 Clientseitiger Datenaustausch – Flash & Javascript 167
5.1 Daten...
VIII
7.4 Jukebox in ActionScript 2.0 340
7.4.1 XML-Daten laden 341
7.4.2 Abspielen der Songs 344
7.4.3 ID3-Tags auslesen 3...
IX
SIEH’EINER AN …
Schön, Sie hier zu treffen! Ein Sprichwort sagt „Alles neu macht der Mai“ – nun, Flash erstrahlt
in Ver...
X
JavaScript: Sie sind eventuell (noch) kein Programmierprofi, jedoch wissen Sie, wie man
mit dem <script>-Tag umgeht und ...
XI
Ein immerwährendes Problem in der Welt des Internets sind die Browser: verschiedene Gene-
rationen von Browsern, versch...
XII
mich sicherlich schimpfen werden, dass sie hier namentlich nicht erwähnt sind („… wie konn-
test du mich nur vergessen...
1
EINLEITUNG
Flash, AJAX und PHP – das wird spannend!
Vor kurzem ist die neueste Version von Flash in deutscher Ver-
sion ...
K A P I T E L 12
Mein Tipp in Bezug auf die beiden Versionen (ActionScript 1.0 mal außer Acht gelas-
sen): Sollten Sie sic...
E I N L E I T U N G 3
Besonders wichtig ist mir, dass Sie nach dem Lesen dieses Buchs ein Grundverständnis
für die Arbeit ...
2
GRUNDLAGEN DER
PROGRAMMIERUNG
Variablen, Arrays, Schleifen und Co. sind das Handwerkszeug
eines Programmierers. In diese...
K A P I T E L 26
Bitte beachten Sie jedoch, dass dieses Buch ein umfassendes Buch zu den Themen PHP,
JavaScript und Action...
G R U N D L A G E N D E R P R O G R A M M I E R U N G 7
So weit zu den einfachen Dingen, nun zu den etwas schwierigeren: W...
K A P I T E L 28
Bitte beachten Sie, dass sowohl ein- als auch mehrzeilige Kommentare an derjenigen
Stelle beginnen, an de...
G R U N D L A G E N D E R P R O G R A M M I E R U N G 9
Befehle abschließen
Im obigen Fall finden Sie noch einen weiteren ...
K A P I T E L 210
Variablen …
müssen in PHP mit einem Dollarzeichen „$“ beginnen (in Flash und JavaScript ist
dies nicht d...
G R U N D L A G E N D E R P R O G R A M M I E R U N G 11
Ein kleines Beispiel in PHP:
<?php
//Anlegen der Variablen
$plNic...
K A P I T E L 212
Grunddatentypen sind:
Number: numerische Variablen (Zahlen)
String: Textvariablen
Boolean: Variablen, di...
G R U N D L A G E N D E R P R O G R A M M I E R U N G 13
var myBoolean:Boolean = true;
trace("Der Wert der (nicht existent...
K A P I T E L 214
Flash: nicht deklarierte lokale Variablen in Codeblöcken
In Flash unterscheiden wir zwischen deklarierte...
G R U N D L A G E N D E R P R O G R A M M I E R U N G 15
Wie Sie erkennen, haben wir nicht sehr viel geändert. Innerhalb d...
K A P I T E L 216
Tipp: Ich würde Ihnen in jedem Fall empfehlen, die Eigenschaft register_globals
auf off zu belassen (ode...
G R U N D L A G E N D E R P R O G R A M M I E R U N G 17
Außerhalb der Funktion showVariables wird eine Variable global01 ...
K A P I T E L 218
Operatoren
Numerische Werte kann man mithilfe von folgenden Operatoren miteinander ver-
knüpfen: Nehmen ...
G R U N D L A G E N D E R P R O G R A M M I E R U N G 19
Zuweisungsoperator Operation
variable = Wert Einer Variable wird ...
K A P I T E L 220
var variable1:Number = 23;
var variable2:Number = 20;
var variable3:Number = variable1 % variable2; //Er...
G R U N D L A G E N D E R P R O G R A M M I E R U N G 21
var myText:String = "Name = ";
myText += "Uwe";
Listing 2.25: ......
K A P I T E L 222
Die Wirkungsweise der einzelnen Operationen sehen Sie in der nachfolgenden Tabelle.
Variable 1 Variable ...
G R U N D L A G E N D E R P R O G R A M M I E R U N G 23
6. ==, != , ===, !==
7. &
8. |
9. &&
10. ||
11. ?, :
12. =, +=, -...
K A P I T E L 224
2.5 Arrays
Arrays sind für die Arbeit eines jeden Programmierers von großer Bedeutung. Sie
können sich e...
G R U N D L A G E N D E R P R O G R A M M I E R U N G 25
var arrUser = new Array("Uwe", "Uwe", "Mutz");
Listing 2.31: ... ...
K A P I T E L 226
"Nachname" => "Mutz"
);
Jetzt hat jeder Wert des Arrays eine eindeutige Bezeichnung erhalten. Man sprich...
G R U N D L A G E N D E R P R O G R A M M I E R U N G 27
Mehrdimensionale Arrays (jedoch nicht assoziativ) anzulegen, ist ...
K A P I T E L 228
2.6 Bedingungen
In der Programmierung gibt es oft Situationen, in denen ein Programmblock nur unter
eine...
G R U N D L A G E N D E R P R O G R A M M I E R U N G 29
Ein einfaches Beispiel vergleicht die Variablen a und b miteinand...
K A P I T E L 230
var a:Number = 23;
var b:Number = 17;
if(a>b) {
trace("a ist groesser als b");
}
else {
trace("b ist gro...
G R U N D L A G E N D E R P R O G R A M M I E R U N G 31
//Programmblock, falls keiner der Werte auf die Variable zutrifft...
K A P I T E L 232
able genauso um einen gewissen Wert verringert werden könnte, je nachdem, was im
Zählvariablen-Inkrement...
G R U N D L A G E N D E R P R O G R A M M I E R U N G 33
hat, dass die PHP- oder Flash-Datei bzw. JavaScript-Anwendung nic...
K A P I T E L 234
/* falls $a pro Schleifendurchlauf erhöht wird, ist die obige Schleife
eine Endlosschleife; falls $a ver...
G R U N D L A G E N D E R P R O G R A M M I E R U N G 35
i += 1; //erhöht die Variable i um eins
i += 3; //erhöht die Vari...
K A P I T E L 236
Jetzt ein praktisches Beispiel. Sie erinnern sich sicher noch an unser Array mit den
Userdaten.
Mit echo...
G R U N D L A G E N D E R P R O G R A M M I E R U N G 37
var arrUser = new Array("Uwe","Uwe","Mutz");
for(var i =0; i<arrU...
K A P I T E L 238
var arrUser:Array = new Array("Uwe","Uwe","Mutz");
for(element in arrUser) {
trace("arrUser["+element+"]...
G R U N D L A G E N D E R P R O G R A M M I E R U N G 39
Seit ActionScript 3.0 existiert in Flash nun auch eine for each.....
K A P I T E L 240
do{
//Programmblock
} while(Bedingung);
Listing 2.63: Syntax für do..while-Schleifen
Die do..while- und ...
G R U N D L A G E N D E R P R O G R A M M I E R U N G 41
Die Anmerkungen zur Abbruchbedingung bei der do..while-Schleife g...
K A P I T E L 242
Funktionen bieten uns bei der Programmierung zwei entscheidende Vorteile:
Funktionen können bei Bedarf –...
G R U N D L A G E N D E R P R O G R A M M I E R U N G 43
return Variable / Wert;
}
Übergabe von Daten und Rückgabe
In dies...
K A P I T E L 244
Funktionsaufruf
Aufgerufen wird eine Funktion über den Namen der Funktion, wie z.B.:
Addiere(1,3); //wen...
G R U N D L A G E N D E R P R O G R A M M I E R U N G 45
alert(ergebnis);
}
Addiere2(10,340);
Listing 2.72: JavaScript gib...
K A P I T E L 246
return $ergebnis;
}
//Array der Parameter erzeugen
$params = array(1,3,5,2,8);
//Aufruf der Funktion Add...
G R U N D L A G E N D E R P R O G R A M M I E R U N G 47
}
Addiere3(1,3,5,2,8);
Listing 2.76: Auswerten einer beliebigen A...
K A P I T E L 248
HTTP und Cookies
So weit, so gut, aber wahrscheinlich stellen Sie sich nun die Frage: „Was hat jetzt HTT...
G R U N D L A G E N D E R P R O G R A M M I E R U N G 49
Sehen wir uns die einzelnen Parameter genauer an:
Name: Der Name ...
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Nächste SlideShare
Wird geladen in …5
×

Flash cs3, ajax und php

497 Aufrufe

Veröffentlicht am

Veröffentlicht in: Bildung
0 Kommentare
0 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

Keine Downloads
Aufrufe
Aufrufe insgesamt
497
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
3
Aktionen
Geteilt
0
Downloads
9
Kommentare
0
Gefällt mir
0
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie

Flash cs3, ajax und php

  1. 1. Flash CS3, AJAX und PHP
  2. 2. Flash CS3, AJAX und PHP Ein Imprint von Pearson Education München • Boston • San Francisco • Harlow,England Don Mills,Ontario • Sydney • Mexico City Madrid • Amsterdam ADDISON-WESLEY Uwe Mutz
  3. 3. Bibliografische Information Der Deutschen Bibliothek Die Deutsche Bibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über http://dnb.ddb.de abrufbar. Die Informationen in diesem Produkt werden ohne Rücksicht auf einen eventuellen Patentschutz veröffentlicht. Warennamen werden ohne Gewährleistung der freien Verwendbarkeit benutzt. Bei der Zusammenstellung von Texten und Abbildungen wurde mit größter Sorgfalt vorgegangen. Trotzdem können Fehler nicht vollständig ausgeschlossen werden. Verlag, Herausgeber und Autoren können für fehlerhafte Angaben und deren Folgen weder eine juristische Verantwortung noch irgendeine Haftung übernehmen. Für Verbesserungsvorschläge und Hinweise auf Fehler sind Verlag und Herausgeber dankbar. Alle Rechte vorbehalten, auch die der fotomechanischen Wiedergabe und der Speicherung in elektronischen Medien. Die gewerbliche Nutzung der in diesem Produkt gezeigten Modelle und Arbeiten ist nicht zulässig. Fast alle Hardware- und Softwarebezeichnungen und weitere Stichworte und sonstige Angaben, die in diesem Buch verwendet werden, sind als eingetragene Marken geschützt. Da es nicht möglich ist, in allen Fällen zeitnah zu ermitteln, ob ein Markenschutz besteht, wird das ®Symbol in diesem Buch nicht verwendet. Umwelthinweis: Dieses Buch wurde auf chlorfrei gebleichtem Papier gedruckt. Alle Rechte vorbehalten. Kein Teil des Buches darf ohne Erlaubnis der Pearson Education Inc. in fotomechanischer oder elektronischer Form reproduziert oder gespeichert werden. 10 9 8 7 6 5 4 3 2 1 09 08 07 ISBN 978-3-8273-2528-0 © 2007 Addison-Wesley Verlag, ein Imprint der PEARSON EDUCATION DEUTSCHLAND GmbH, Martin-Kollar-Str. 10-12, 81829 München/Germany Alle Rechte vorbehalten Lektorat: Brigitte Bauer-Schiewek, bbauer@pearson.de Fachlektorat: Matthias Kannengiesser Korrektorat: Petra Kienle Herstellung: Claudia Bäurle, cbaeurle@pearson.de Satz: Ulrich Borstelmann, Dortmund (www.borstelmann.de) Einbandgestaltung: Marco Lindenbeck, webwo GmbH, mlindenbeck@webwo.de Druck und Verarbeitung: Kösel Druck, Krugzell (www.koeselBuch.de) Printed in Germany
  4. 4. V INHALTSVERZEICHNIS Sieh' einer an … IX Kapitel 1 Einleitung 1 Kapitel 2 Grundlagen der Programmierung 5 2.1 Programmierung in Flash 6 2.1.1 Anlehnung an JavaScript 6 2.1.2 Objektorientiertes Programmieren 6 2.2 Kommentare 7 2.2.1 Einzeilige Kommentare 7 2.2.2 Mehrzeilige Kommentare 7 2.2.3 Verschachtelte Kommentare 8 2.3 Variablen und Datentypen 8 2.3.1 Variablendeklaration 8 2.3.2 Variablennamen 9 2.3.3 Datentypen 10 2.3.4 Gültigkeitsbereiche von Variablen 13 2.4 Operatoren 17 2.4.1 Arithmetische Operatoren 17 2.4.2 Zuweisungsoperatoren 18 2.4.3 Bitoperatoren 21 2.4.4 Logische Operatoren 21 2.4.5 Vergleichsoperatoren 22 2.4.6 Rangordnung der Operatoren 22 2.5 Arrays 24 2.5.1 Indizierte Arrays 24 2.5.2 Assoziative Arrays 25 2.6 Bedingungen 28 2.6.1 if-Bedingung 28 2.6.2 switch-Bedingung 30
  5. 5. VI 2.7 Schleifen 31 2.7.1 for-Schleife 31 2.7.2 for...each- oder for...in-Schleife 37 2.7.3 do..while-Schleife 39 2.7.4 while-Schleife 40 2.8 Funktionen 41 2.9 Cookies 47 2.9.1 Exkurs HTTP 47 2.10 Sessions 50 2.10.1 session_start() 51 2.10.2 session_register() vs. $_SESSION 51 2.10.3 session_unregister() vs. $_SESSION 53 2.10.4 session_destroy() 53 2.11 Caching 53 2.12 XML auslesen und erstellen 56 2.12.1 Der Aufbau eines XML-Dokuments – Blitzeinführung 56 2.12.2 Auslesen einer XML-Struktur 60 2.12.3 XML-Dokumente erstellen 62 Kapitel 3 Basiswissen 65 3.1 PHP 66 3.2 JavaScript (AJAX) & DOM 66 3.2.1 „Kern-DOM“ 67 3.2.2 Alternativer Zugriff auf Objekte 69 3.3 Flash 72 3.3.1 Sinnvolle Kombination von Flash und PHP 72 3.3.2 Weitere Verbindungsmöglichkeiten zur Serverseite 73 3.3.3 ActionScript 3.0 – die wichtigsten Änderungen 73 Kapitel 4 AJAX – Asynchronus JavaScript and XML 119 4.1 Was ist AJAX? 120 4.2 Was ist AJAX nicht? 120 4.3 Der XMLHttpRequest 122 4.3.1 Details zum XMLHttpRequest-Objekt 125 4.3.2 AJAX im Einsatz 128
  6. 6. VII 4.4 Flash vs. AJAX 164 4.5 Flash & AJAX 165 Kapitel 5 Clientseitiger Datenaustausch – Flash & Javascript 167 5.1 Daten senden: Browser an Flash 168 5.1.1 Variante 1: JavaScript greift auf die SWF-Datei zu 168 5.1.2 Variante 2: Verwenden von HTML-Attributen zum Setzen von Variablen 179 5.2 Daten senden: Flash an Browser 181 5.2.1 Kontaktaufnahme mit getURL 181 5.3 Die ExternalInterface-Klasse – Flash 8 und höher 184 5.3.1 ExternalInterface-Klasse mit ActionScript 1.0/2.0 185 5.3.2 ExternalInterface-Klasse mit ActionScript 3.0 207 5.4 Flash & AJAX 208 5.4.1 Parameterübergabe: Text 209 5.4.2 Parameterübergabe: XML 233 Kapitel 6 Serverseitiger Datenaustausch – Flash, PHP & Datenbank 239 6.1 Drei Technologien im Einsatz 240 6.2 Das LoadVars-Objekt 241 6.3 Die Basis: das XML-Objekt & ActionScript 2.0 266 6.3.1 Grundlegende XML-Befehle 266 6.3.2 Einlesen von XML-Daten 266 6.3.3 Ausgeben von XML-Daten in eine PHP-Seite 286 6.3.4 Die XMLConnector-Komponente 298 6.4 ActionScript 3.0: Neues und Änderungen 309 6.4.1 Das URLLoader- und URLRequest-Objekt 309 6.4.2 Der Aufbau: das XML-Objekt & ActionScript 3.0 325 Kapitel 7 Audio-Jukebox 337 7.1 Abfragen serverseitiger Informationen 338 7.2 Multimediale Anwendungen 338 7.3 Konzept der Jukebox 338 7.3.1 Playlist generieren 338
  7. 7. VIII 7.4 Jukebox in ActionScript 2.0 340 7.4.1 XML-Daten laden 341 7.4.2 Abspielen der Songs 344 7.4.3 ID3-Tags auslesen 349 7.4.4 Abspielsteuerung 351 7.4.5 Lautstärkeregler 353 7.5 Der PHP-Part 355 7.6 Jukebox in ActionScript 3.0 359 7.6.1 Allgemeine Änderungen 359 7.6.2 Änderungen beim Laden der XML-Daten 360 7.6.3 Änderungen im Soundobjekt 363 7.6.4 Änderungen in der Abspielsteuerung 363 7.6.5 Änderungen in der Lautstärkeregelung 370 7.6.6 Songs aus einer ComboBox abspielen 372 7.7 Mögliche Erweiterungen 374 Kapitel 8 Videoplayer (ActionScript 3.0) 375 8.1 Das Konzept des Videoplayers 376 8.2 Flash & Video 376 8.3 Die Umsetzung 378 8.3.1 Flash und die FLVPlayback-Komponente 378 8.3.2 Videos im FLV-Format 382 8.3.3 Dynamisches Verknüpfen der FLVPlayback-Komponente mit einem Video 392 8.3.4 Schritt 1: Abspielen einer Liste von Videos (Array) 394 8.3.5 Schritt 2: Abspielen einer Liste von Videos (XML) 401 8.3.6 Arbeiten mit Cue-Points 426 Stichwortverzeichnis 429
  8. 8. IX SIEH’EINER AN … Schön, Sie hier zu treffen! Ein Sprichwort sagt „Alles neu macht der Mai“ – nun, Flash erstrahlt in Version CS3, PHP läuft stabil in Version 5 und um AJAX müssen wir uns keine Sorgen machen, denn da setzen wir auf die bekannten (und bewährten) Technologien JavaScript und XML. Mit anderen Worten: Dieses Buch baut auf Bewährtem und Neuem auf. Lassen Sie sich überraschen! Aber alles der Reihe nach. Zunächst einmal freut es mich, dass Sie sich für dieses Buch entschie- den haben. Es zeigt mir, dass die Kombination von Flash und PHP nach wie vor ein beliebtes Thema ist. Und mit „Web 2.0“ ist auch AJAX in aller Munde – und wie es scheint auch in Ihrem Interesse. Meine geschätzte Leserschaft Bevor wir ans Eingemachte gehen, möchte ich ein paar Worte vorausschicken, für wen dieses Buch geschrieben ist und – vor allem! – für wen dieses Buch nicht geschrieben ist (ich denke, es ist wichtiger, solche „Nicht-Ziele“ zu definieren). Das sind meine Leser! Dieses Buch ist für Einsteiger in die Thematik „Flash & PHP & AJAX“ geschrieben. Dabei gehe ich davon aus, dass meine Leser mit der Arbeitsweise von Flash, PHP & JavaScript vertraut sind, sie also den Umgang mit Folgendem im Schlaf beherrschen : Flash: Die „Zeit“: Der Umgang mit der Zeitleiste ist kein Problem, ebenso wissen Sie über Schlüsselbilder, benannte Bilder und Szenen Bescheid. Die „Elemente“: Formen, Symbole und Instanzen, grundlegende Komponenten stellen für Sie in der Anwendung kein Problem dar, Benennung von Instanzen, Definieren von Instanz-Eigenschaften etc. erledigen Sie ohne nachzudenken. .fla versus .swf: Selbstverständlich ist Ihnen der Unterschied zwischen der Flash- und der SWF-Datei bekannt, auch haben Sie schon unzählige Male eine SWF-Datei in ein Web- dokument eingebunden. Die Problematik verschiedener Browser-Systeme (Einbinden der SWF-Dateien mittels <embed> oder <object>) kennen Sie ebenso. ActionScript: Dass hiermit die in Flash verwendete Programmiersprache gemeint ist, wissen Sie. Dabei hatten Sie bereits ersten Kontakt mit grundlegenden Befehlen wie etwa stop(), play(), gotoAndPlay(), gotoAndStop() usw. – die Grundlagen der Pro- grammierung sind Ihnen bekannt und ein wenig programmiert haben Sie auch schon. u u u u u
  9. 9. X JavaScript: Sie sind eventuell (noch) kein Programmierprofi, jedoch wissen Sie, wie man mit dem <script>-Tag umgeht und dass man JavaScript-Code in einer externen Datei ablegen kann, welche sich im Weiteren mit einem Webdokument verknüpfen lässt. Wahr- scheinlich sind Sie sogar in der Lage, grundlegenden Code zu schreiben und auch kleinere Projekte zu verstehen – ansonsten helfen Ihnen das einleitende Kapitel „Grundlagen der Programmierung“ und die einschlägige Literatur weiter. PHP und MySQL: Server- versus Clientseite: PHP ist eine serverseitige, JavaScript eine clientseitige Pro- grammiersprache – kein Thema, das wissen Sie. Programmierung: Ein wenig Erfahrung haben Sie bereits gesammelt bzw. Sie haben zumindest schon einmal PHP-Code geschrieben. Sollte dem nicht so sein – wie gesagt, dann ist das Einleitungskapitel für Sie gedacht. Datenbanken: Die Grundlagen relationaler Datenbanken kennen Sie, ebenso haben Sie bereits einmal mit MySQL in Zusammenhang mit einer datenbankbasierten Weban- wendung gearbeitet. Das System PHPMyAdmin ist Ihnen auch ein Begriff und Tabel- len können Sie anlegen, mit Daten befüllen und auch administrieren. Nein? Kapitel „Grundlagen der Programmierung“ … Die liebe Programmierung … Sollten Sie mit der Programmierung noch nicht so sehr vertraut sein, so ist Ihnen das Kapitel „Grundlagen der Programmierung“ gewidmet, in dem Sie das notwendige Rüstzeug vermittelt bekommen, um die fol- genden Kapitel locker bewältigen zu können. Bedenken Sie jedoch bitte, dass es sich hierbei nicht um ein allumfassendes Werk zu den genannten Technologien handelt und deshalb im Abschnitt zu den Grundlagen der Programmierung auch nur die für die restlichen Kapitel notwendigen Themen behandelt werden. Diese Leser werden nicht glücklich! Wie schon eingangs erwähnt, ist dieses Buch für Einsteiger geschrieben. Sollten Sie also bereits Programmierprofi sein, Hunderte Projekte in Flash realisiert und jegliche Arten von Daten- banksystemen realisiert haben, dann werden Sie die in diesem Buch beschriebenen Inhalte nicht befriedigen. Das Anwenden von Flash-Komponenten zur Kommunikation mit serversei- tigen (Adobe-)Anwendungen ist zwar ein Teil des Buchs, spielt jedoch nur eine untergeordnete Rolle. Ich werde auch nicht den Versuch machen, den kürzest möglichen Programmcode zu schrei- ben, denn dies geht meist auf Kosten der Lesbarkeit und somit der Verständlichkeit des Pro- grammierten. Ein perfekter Programmierer wird man nie, ein sehr guter Programmierer wird man durch das tägliche Programmieren – auf diesen Weg kann ich Sie führen, indem ich Ihnen den Einstieg so einfach wie möglich mache. u u u u u
  10. 10. XI Ein immerwährendes Problem in der Welt des Internets sind die Browser: verschiedene Gene- rationen von Browsern, verschiedene Browser, verschiedene Plattformen – zumeist verhalten sie sich unterschiedlich und liefern unterschiedliche Resultate. Ich werde in diesem Buch nicht den Versuch anstellen, alle nur erdenkbaren Eventualitäten zu berücksichtigen, sondern viel- mehr Rücksicht auf die gängigen Browser nehmen: Microsoft Internet Explorer 6 unter Windows Microsoft Internet Explorer 7 unter Windows Firefox 2 unter Windows und Mac OS X Opera 9.1 unter Windows und Mac OS X Safari 2.0.4 unter Windows Diese Browser stellen mit Sicherheit den repräsentativen Querschnitt über alle gängigen und im Einsatz befindlichen Browser weltweit dar – alle weiteren Browser lasse ich „links liegen“. Zusammengefasst: Profis werden in diesem Buch nicht die gewünschten Inhalte finden – dies ist ein Einsteigerbuch! Für Sie, meine lieben Experten, hält Addison-Wesley eine Reihe von Büchern bereit, die Ihren Ansprüchen gerecht werden und auch noch die letzte Frage beant- worten. Danke! An dieser Stelle wird es im Allgemeinen persönlich … Wohl nichts, das den Inhalt eines Buchs wesentlich beeinflussen würde, aber eine wunderbare Möglichkeit, sich zurückzulehnen, zu erfreuen an einem sonnigen Tag und die verstrichene Zeit Revue passieren zu lassen. Mit der Zeit tritt dann eine innere Dankbarkeit ein, die darauf wartet, nach außen zu treten und DANKE in die Welt zu schreien – danke all den Menschen, die mir wertvoll sind und mein tägliches Leben bereichern. Allen voran meiner geliebten Freundin Doris, die mir mein tägliches Maß an Freude und Spaß zu servieren weiß und mich mit Motivation und Lebensfreude versorgt – meine lieben Herren, ihr könnt euch glücklich schätzen, wenn auch ihr mit einer solch tollen Freundin gesegnet seid. Werte Damen – sorry, ich bin vergeben! Im selben Atemzug danke ich meiner Familie für eigentlich alles! Geburt (inklusive Zeugung), Erziehung, Ausbildung, Unterstützung, Liebe, Freundschaft, Rat und Tat – nichts blieb auf der Strecke. Und ganz nebenbei haben diese beiden auch dafür gesorgt, mir eine tolle Schwester zu schenken (die mir wiederum einen tollen Neffen geschenkt hat ...)! Alle meine Freunde, mit denen ich feiern und Spaß haben kann. Jungs, manchmal muss ich euch zwar motivieren, aus euren trauten Heimen zu kriechen, um etwas zu unternehmen, aber das erledige ich gerne. Caro, AIC, ToM, Gott, Chris, Clemens, Erik, Hari und viele mehr, die u u u u u
  11. 11. XII mich sicherlich schimpfen werden, dass sie hier namentlich nicht erwähnt sind („… wie konn- test du mich nur vergessen …“ usw.). Ein herzlicher Dank gebührt auch meinem Verlag und meinen Lektoren, die mich so nett in ihren Kreis aufgenommen haben und mir bei jeder Frage und jedem Anliegen mit Tipp und Tat zur Seite standen – ich freue mich auf jede Zusammenarbeit, die noch kommen wird! Zu guter Letzt danke ich Ducati für meine Monster, Metallica für die Art von Musik, die ich täglich brauche, und meinem Doktorvater Gü Blaschek für all die tollen Gespräche, die mich immer wieder über Gott und die Welt nachdenken lassen. Me, myself and I … Uwe Mutz
  12. 12. 1 EINLEITUNG Flash, AJAX und PHP – das wird spannend! Vor kurzem ist die neueste Version von Flash in deutscher Ver- sion erschienen: Flash CS3. Viele Entwickler waren schon sehr auf die Neuerungen und Änderungen gespannt. Und wissen Sie was – sie wurden nicht enttäuscht! Sogar ganz im Gegenteil ... Was Flash speziell für Programmierer durch die Einführung von ActionScript 3.0 zu bieten hat, ist schon fast eine Sensation. Beinahe kein Stein blieb auf dem anderen, die hart erworbenen Kenntnisse in ActionScript 2.0 dienen mehr oder weniger nur noch dafür, dass man sich ein bisschen „zurechtfindet“. Ange- fangen von einfachen Änderungen in den Bezeichnungen von Eigenschaften bis hin zum kompletten Wegfall diverser Klassen (bzw. Verschieben in andere Pakete) ist alles gegeben. Da ich an dieser Stelle aber nicht davon ausgehen kann, dass ab jetzt sämtliche Entwicklungen in ActionScript 3.0 erfolgen (dies setzt nämlich den Flash9-Player voraus), gehe ich in diesem Buch sowohl auf die Version 2.0 als auch auf 3.0 von ActionScript ein. Gerade einmal das letzte Beispiel in diesem Buch – der Videoplayer – ist komplett in ActionScript 3.0 ent- wickelt worden. Gerade bei Videos bietet sich ActionScript 3.0 geradezu an. Der zweite große Workshop im Buch – der Audio- player – ist sowohl in ActionScript 2.0 als auch 3.0 entwickelt. Ideal also, um einen Vergleich der beiden Versionen zu ziehen.
  13. 13. K A P I T E L 12 Mein Tipp in Bezug auf die beiden Versionen (ActionScript 1.0 mal außer Acht gelas- sen): Sollten Sie sich in eine Version gezielt einarbeiten wollen, beschäftigen Sie sich primär mit der 3.0er Version, denn sie ist mit Sicherheit die Zukunft. Es wird nicht mehr lange dauern, bis die Mehrheit der Internet-User auf den Flash9-Player umge- stellt hat. Dieses Buch wird sich nur sehr oberflächlich mit allen Komponenten und Möglich- keiten befassen, die im Rahmen der Entwicklungsumgebung auf der Bühne platziert werden. Umso mehr ist der Fokus auf die Programmierung gerichtet. Ein Flash Com- munication Server wird ebenso wenig ein Thema sein wie Elemente der FileReference- Klasse usw. Primäres Ziel des Buchs ist es, die Möglichkeiten der Zusammenarbeit dreier Technologien zu zeigen und nicht jede Technologie für sich. Warum sich das Buch mit PHP beschäftigt, liegt auf der Hand: PHP hat sich zu der serverseitigen Programmiersprache entwickelt, um die man einfach nicht mehr herumkommt. Und das aus gutem Grunde, wurde sie doch speziell für den Einsatz im Web entwickelt. Und welche andere serverseitige Programmiersprache kann das schon von sich behaupten? Da sich die Syntax an die gängigen Standards anlehnt, ist das Erlernen nicht allzu aufwändig. Hat man den Unterschied zwischen Server- und Clientseite einmal verstanden, ist eigentlich alles klar. Alternativ könnte man genauso gut auf ASP, ASP.NET oder JSP zurückgreifen, aber warum eine weniger gängige Technologie einsetzen, wenn das Gute doch so nah liegt? Dass das Thema AJAX in diesem Buch aufgegriffen wird, mag schon etwas weniger auf der Hand liegen, denn im Grunde genommen ist Flash in der Lage, so gut wie alle Bereiche abzudecken, die uns AJAX auf Clientseite ermöglicht. Spannend wird die Sache jedoch, wenn man sich die Möglichkeiten überlegt, wie sich Flash und AJAX ergänzen können. Ein guter Webdesigner entwickelt nicht stur in eine Richtung, son- dern kennt die User seiner Webanwendungen. Genau aus diesem Grund ist es manch- mal notwendig, parallel in AJAX und Flash zu entwickeln. Sollte man dann nicht genau wissen, in welchen Bereichen sich AJAX und Flash überschneiden? Ich denke schon. Mindestens genauso spannend ist es, wenn „gemischte“ Webanwendungen mit AJAX und Flash entwickelt werden müssen. Flash interagiert mit AJAX, AJAX interagiert mit Flash. So läuft der Hase! Dass in diesem Buch nicht alle Anwendungsgebiete abgedeckt werden können, versteht sich von selbst. Aus diesem Grunde habe ich mich für multimediale Anwendungen mit Audio- und Videodaten entschieden. Das „Dahinter“ („Wie erhält ein Videoplayer seine Playlist?“ etc.) wird vor allem über XML-Daten realisiert, Interaktion mit dem Browser erfolgt zumeist über die ExternalInterface-Klasse. PHPPHP AJAXAJAX
  14. 14. E I N L E I T U N G 3 Besonders wichtig ist mir, dass Sie nach dem Lesen dieses Buchs ein Grundverständnis für die Arbeit mit Flash, AJAX und PHP als Paket entwickelt haben und einsetzen können. Kochrezepte werden Sie nur wenige finden. Aber Hand aufs Herz – ohne Denken läuft in unserem Business sowieso nichts mehr! Dann empfiehlt es sich, lieber ein gutes Verständnis einer Thematik zu haben, als Kochrezepte einzusetzen, die man nicht versteht! Abschließend: Sollten Sie Fragen zu den Inhalten oder Anregungen haben, so freue ich mich über eine Kontaktaufnahme per E-Mail: flashajaxphp@syne.at.
  15. 15. 2 GRUNDLAGEN DER PROGRAMMIERUNG Variablen, Arrays, Schleifen und Co. sind das Handwerkszeug eines Programmierers. In diesem Kapitel werden wir uns mit den theoretischen Grundlagen von Programmiersprachen befassen. Haben Sie diese Grundlagen einmal verstanden, steht Ihnen eigentlich die ganze Welt der Programmierung offen. Da dieses Buch dynamische Flash-Anwendungen durch den Einsatz von ActionScript und PHP zum Thema hat, zeigen wir Ihnen die Grundlagen der Programmierung auch gleich anhand dieser zwei Programmiersprachen. Des Weiteren erhal- ten Sie im Rahmen dieses Kapitels eine Blitzeinführung zum Thema XML. InvielenFällenmüssenwirdabeinichtzwischenPHP,JavaScript und ActionScript unterscheiden. Wo dies jedoch notwendig ist, finden Sie in der äußeren Spalte neben dem Text einen Hinweis für PHP, JavaScript bzw. für ActionScript.
  16. 16. K A P I T E L 26 Bitte beachten Sie jedoch, dass dieses Buch ein umfassendes Buch zu den Themen PHP, JavaScript und ActionScript weder ersetzen kann noch soll. Dieses Kapitel dient dazu, Ihnen die notwendigen Voraussetzungen mit auf den Weg zu geben – jedoch nur die notwendigen Voraussetzungen, die Sie für die weiteren Kapitel benötigen. 2.1 Programmierung in Flash Anders als in gängigen Programmiersprachen muss in Flash – aufgrund seines Ursprungs als Animationsprogramm – die Zeitleiste berücksichtigt werden. Somit müssen wir mit dem Faktor „Zeit“ umgehen lernen. Wie Sie bereits gehört haben, ist die Programmierung in Flash auf drei verschiedene Arten möglich: 1. Programmierung in der Zeitleiste (egal, ob Zeitleiste der Bühne oder die eines MovieClip) 2. Bei MovieClips über MovieClip-Ereignisse (diese werden Sie noch kennenlernen) 3. Bei Schaltflächen über Schaltflächen-Ereignisse (sie werden ebenfalls noch vorgestellt) 2.1.1 Anlehnung an JavaScript ActionScript ist eine Programmiersprache, die sich an JavaScript (bekannt aus der Webprogrammierung) anlehnt, jedoch nicht genau deren Umfang hat. Detailliert soll auf diese Tatsache nicht eingegangen werden, nur eines sei noch erwähnt: Können Sie JavaScript programmieren, so ist es ein Leichtes, ActionScript zu programmieren. 2.1.2 Objektorientiertes Programmieren Oft ist die Rede von ActionScript 1.0, ActionScript 2.0 und ActionScript 3.0. Der wesentliche Unterschied zwischen den ersten beiden Versionen besteht darin, dass Version 2.0 im Gegensatz zu Version 1.0 objektorientiert ist. Ein weiteres Feature ist die Möglichkeit einer strikten Typisierung, auf die wir im Verlauf dieses Kapitels noch näher eingehen werden. Für unsere Anwendungen wird es nicht notwendig sein, objektorientiert zu programmieren, deshalb ist ein umfassendes Verständnis von ActionScript 2.0 nicht erforderlich. ActionScript 3.0 stellt eine beinahe vollkommene Neuentwicklung von ActionScript dar. Sämtliche Unterschiede und Änderungen fin- den Sie in der ActionScript-Referenz unter dem Schlagwort „ActionScript 2.0 Migra- tion“, auf die wesentlichen Änderungen gehen wir im Weiteren noch genauer ein. Bitte beachten Sie jedoch, dass die einleitenden Kapitel dieses Buchs keinesfalls ein Action- Script-Buch und schon gar kein ActionScript 3.0-Buch ersetzen können! Kein allumfas- sendes Werk zu PHP, JavaScript und ActionScript! Kein allumfas- sendes Werk zu PHP, JavaScript und ActionScript! MovieClips Bei der Programmierung mit MovieClips ist es von besonderer Bedeutung, den verwendeten MovieClips einen Namen zu geben.
  17. 17. G R U N D L A G E N D E R P R O G R A M M I E R U N G 7 So weit zu den einfachen Dingen, nun zu den etwas schwierigeren: Wir müssen uns die Grundlagen der Programmierung aneignen und das bedeutet ein hartes Stück Arbeit. Es wäre viel zu trocken, diesen Part rein theoretisch zu halten, also werden wir beglei- tend dazu einige kleine Beispiele programmieren. Die folgenden Ausführungen können – wenn nicht anders vermerkt – für die Pro- grammiersprachen JavaScript, ActionScript und PHP verstanden werden. 2.2 Kommentare Gleich zu Beginn dieses Kapitels möchten wir Sie auf die Möglichkeit der Kommentie- rung Ihrer Scripte hinweisen. Dies ist natürlich nicht zwingend notwendig, jedoch sehr wichtig und hilfreich. Beim Erstellen Ihres Programms ist wahrscheinlich der Code noch verständlich und logisch. Ob dies nach ein oder zwei Monaten immer noch so ist, ist fraglich. Zusätzlich erleichtern Sie Kollegen die Arbeit mit Ihren Scripten, wenn diese gut kommentiert sind. Nutzen Sie Kommentare also so oft wie möglich. 2.2.1 Einzeilige Kommentare Zwei Schrägstriche // leiten einen Kommentar ein, und zwar einen zeilenweisen Kom- mentar. Alles, was Sie in dieser Zeile nach den Schrägstrichen schreiben, wird nicht als Befehl interpretiert, sondern nur als Anmerkung, also als Kommentar. //dies ist ein einzeiliger Kommentar 2.2.2 Mehrzeilige Kommentare Sollten Sie einen Kommentar benötigen, der über mehrere Zeilen geht, so können Sie ihn mit einem beginnenden /* und einem (in irgendeiner der darunterstehenden Zeilen) endenden */ einschließen, also z.B. so: /* dies ist ein mehrzeiliger Kommentar */ Im Allgemeinen werden Kommentare im Code verwendet, um die Ideen während der Entwicklung des Codes bzw. wichtige Informationen zu Variablen, Objekten etc. (etwa deren Bedeutung oder mögliche Werte) festzuhalten. Ein weiteres Anwendungsgebiet ist das „Auskommentieren„ von nicht verwendeten Codezeilen: Der Entwickler ist grundsätzlich immer versucht, den bereits geschriebenen Code bei Nichtverwendung keinesfalls einfach zu löschen, sondern ihn – sollte er wider Erwarten doch noch benö- tigt werden – auszukommentieren.
  18. 18. K A P I T E L 28 Bitte beachten Sie, dass sowohl ein- als auch mehrzeilige Kommentare an derjenigen Stelle beginnen, an der die Kommentarzeichen gesetzt werden. Dabei werden einzeilige Kommentare oft verwendet, um am Ende einer Codezeile diverse Anmerkungen zu platzieren, wie etwa: var modus:Number = 1; //Nur die Werte 1 und 2 sind gueltig Im obigen Beispiel wird so deutlich, dass bei Verwendung der Variablen modus nur die Werte 1 oder 2 zugewiesen werden dürfen. Beachten Sie bitte weiterhin, dass erklärende (ein- oder mehrzeilige) Kommentare besser vor den Codeblock geschrieben werden, wo diese Erklärung benötigt wird. 2.2.3 Verschachtelte Kommentare Verschachtelte Kommentare sind in PHP nicht erlaubt. Das Ausführen Ihres Pro- gramms wird in solch einem Fall abgebrochen. 2.3 Variablen und Datentypen 2.3.1 Variablendeklaration Wenn Sie ein Programm erstellen, müssen Sie bestimmte Werte für die spätere Ver- wendung sicher und eindeutig speichern. Denken Sie einfach an ein Spiel, in dem der User zu Beginn seinen Nickname nennt. Im weiteren Verlauf des Spiels werden wir diesen Spieler immer an diesem Namen erkennen und ihn auch mit diesem Namen ansprechen. Damit ist eine klare Identität gegeben. Eingegebene Werte sind dann unter diesem Namen jederzeit abrufbar. In diesem Fall würden wir zum Beispiel eine Variable namens plNickname anlegen und in ihr den eingegebenen Namen des Spielers speichern. $plNickname ; // Variablendeklaration $plNickname = "Uwe"; // der Variable $plNickname wird der Wert Uwe zugewiesen Listing 2.1: PHP erkennt Variablen immer am $-Zeichen, das ohne Leerzeichen direkt vor dem Namen der Variable stehen muss. In sehr vielen anderen Programmiersprachen muss eine Variable vor ihrer Verwen- dung deklariert, d.h. ins Leben gerufen werden. Würde dies nicht erfolgen, könnte man mit der gewünschten Variable nicht arbeiten, da sie noch nicht existiert. Da wir PHP als serverseitige Programmiersprache verwenden, wäre es eigentlich nicht nötig, Variablen am Anfang eines Scripts zu deklarieren. Jedoch sollten Sie sich trotzdem angewöhnen, Variablen immer anzugeben, da Sie dadurch einen besseren Überblick über die verwendeten Variablen erhalten. PHPPHP Variablen- deklaration immer am Anfang Variablen- deklaration immer am Anfang
  19. 19. G R U N D L A G E N D E R P R O G R A M M I E R U N G 9 Befehle abschließen Im obigen Fall finden Sie noch einen weiteren Punkt, der bei der Programmierung wichtig ist: Wie Sie sehen, ist jede Zeile mit einem Strichpunkt abgeschlossen. Dies ist in PHP zwingend notwendig, in Flash nicht. Variablentypen In Flash verhält es sich ähnlich, jedoch hat man seit der Einführung von ActionScript 2.0 die Möglichkeit, Variablen explizit zu deklarieren, wovon Sie auch Gebrauch machen sollten. Wie Sie gleich im nächsten Abschnitt sehen werden, sollte bei guter Programmierung in Flash neben dem „Erwähnen“ der Variable über deren Namen auch der Typ der Variable angegeben werden. Würden wir das Beispiel aus PHP von oben umsetzen, so würde das wie folgt aussehen: var plNickname:String; plNickname = "Uwe"; Listing 2.2: Variablendeklaration und anschließende Wertzuweisung in Flash In der ersten Zeile wird eine Variable vom Typ String (das ist ein Text) angelegt. Dies bedeutet nichts anderes, als dass in dieser Variablen nur Textwerte gespeichert werden. In der zweiten Zeile wird dieser Variablen der Wert „Uwe“ zugewiesen. Bitte beachten Sie an dieser Stelle, dass String-Werte immer in Anführungszeichen stehen. Kürzt man die beiden Zeilen noch etwas ab, so erhält man nachfolgenden Code, in dem gleichzeitig mit der Variablendeklaration auch eine Wertzuweisung erfolgt: var plNickname:String = "Uwe"; Listing 2.3: Variablendeklaration und gleichzeitige Wertzuweisung Somit wissen wir, wie man Variablen anlegt und ihnen einen Wert zuweist. Jetzt müs- sen wir uns kurz Gedanken darüber machen, welche Variablennamen gültig sind und welche nicht. In JavaScript wird wie in PHP bei der Variablendeklaration nicht zwischen verschie- denen Variablentypen unterschieden, deshalb erfolgt die Zuweisung wie folgt: var plNickname = "Uwe"; Listing 2.4: Variablendeklaration und anschließende Wertzuweisung in JavaScript 2.3.2 Variablennamen Bei der Namensgebung der Variablen in Flash, JavaScript und PHP müssen Sie einige Regeln strikt beachten: ActionScriptActionScript JavaScriptJavaScript
  20. 20. K A P I T E L 210 Variablen … müssen in PHP mit einem Dollarzeichen „$“ beginnen (in Flash und JavaScript ist dies nicht der Fall). dürfen keine Leerzeichen enthalten. dürfen nur aus Buchstaben und Ziffern bestehen, wobei das erste Zeichen nach dem Dollarzeichen ein Buchstabe sein muss. dürfen Groß- und Kleinbuchstaben enthalten. PHP und ActionScript (ab Version 2.0) sind Case-sensitive und erkennen die Unterschiede. dürfen keine Umlaute wie ä, ö, ü und kein ß enthalten. dürfen als einziges Sonderzeichen den Unterstrich „_“ enthalten. dürfen nicht wie Befehle der Sprache PHP, JavaScript bzw. ActionScript benannt sein (eine Auflistung aller Befehle entnehmen Sie bitte den jeweiligen Sprachrefe- renzen). Bitte gewöhnen Sie sich an, für die „Taufe“ der Variablen möglichst selbst erklärende Namen zu verwenden. Damit sind Sie (und auch andere Personen) in der Lage, Ihren Code auch später schnell und unmissverständlich zu lesen und zu erfassen. Originali- tät bei der Namensvergabe wäre hier völlig fehl am Platz. 2.3.3 Datentypen Der Typ der Daten legt verbindlich fest, welcher Inhalt in den Variablen gespeichert werden kann. Man kann auch sagen, dass der Datentyp die Art der Information beschreibt, die in der Variable gespeichert werden soll. In PHP gibt es folgende Datentypen: Ganze Zahlen (Integer) Zahlen mit Nachkommastellen (Float) Zeichenketten (String) Felder (Array) Objekte Zum Glück müssen wir uns in PHP und JavaScript über den Inhalt von Variablen wenig Gedanken machen. PHP und JavaScript entscheiden nämlich selbst, welcher Datentyp für welchen Inhalt verwendet werden soll. So kann es durchaus vorkommen, dass eine Variable im Laufe eines Programms ihren Datentyp selbstständig ändert. u u u u u u u u u u u u PHPPHP
  21. 21. G R U N D L A G E N D E R P R O G R A M M I E R U N G 11 Ein kleines Beispiel in PHP: <?php //Anlegen der Variablen $plNickname = "Uwe"; // Uwe wird in der Variable $plNickname gespeichert. (Typ: String) $pointsUwe = 24.3; // Variable $pointsUwe bekommt den Wert 24,3 (Typ: Float) $bonuspoints = 10; // Variable $bonuspoints bekommt den Wert 10 (Typ: Integer) $final_points = 15; // Variable $final_points hat den Wert 15 (Typ: Integer) //Berechnung der neuen final_points $final_points = $pointsUwe + $bonuspoints; ?> <html> <head><title>Uebung Variablen / Datentyp</title></head> <body> <?php echo("Endstand von "); echo($plNickname); echo(": "); echo($final_points;) ?> </body> </html> Listing 2.5: PHP-Code in einer HTML-Seite Die Variable $finalpoints hatte zu Beginn des Programms den Datentyp „Integer“. Nach der Neuberechnung des Endstands wurde in der Variable $final_points der Fließkommawert „34.3“ gespeichert. Somit hat sich der Datentyp von „Integer“ zu „Float“ geändert. In Flash sieht die Sachlage ähnlich, wenn auch etwas unterschiedlich aus. Flash unter- scheidet zwischen „Grunddatentypen“ und „Referenzdatentypen“ (oder „integrierten Datentypen“). Des Weiteren existieren die speziellen Datentypen Null und undefi- ned. ActionScriptActionScript
  22. 22. K A P I T E L 212 Grunddatentypen sind: Number: numerische Variablen (Zahlen) String: Textvariablen Boolean: Variablen, die nur die Werte true oder false speichern können Diese Datentypen werden verwendet, um mit Variablen zu arbeiten. Die Referenzda- tentypen (oder „integrierte Datentypen“) werden hingegen eingesetzt, um einerseits mit MovieClips zu arbeiten, und andererseits, um komplexere Objekte zu erstellen – auf die meisten Vertreter der Referenzdatentypen werden wir später noch zu spre- chen kommen. Referenzdatentypen sind also unter anderem: MovieClip TextField Date Der Datentyp Null deutet an, dass hier kein Wert existiert bzw. keine Daten vorhan- den sind. undefined kennzeichnet, dass einer Variable noch kein Wert zugewiesen wurde. Seit ActionScript 3.0 existieren neben Number nun auch die numerischen Datentypen int (Integer) und uint, wobei uint für „unsigned integer“ (Ganzzahl ohne Vorzei- chen) steht: int: eine Ganzzahl (= Zahl ohne Kommastelle) uint: eine Ganzzahl ohne Vorzeichen (somit können nur Zahlen größer oder gleich 0 gespeichert werden) Datentypen bei der Deklaration Um nun Variablen verschiedener Datentypen zu deklarieren, wird der Datentyp nach dem Variablennamen und einem (deklarierenden) Doppelpunkt geschrieben. Die Syntax lautet wie folgt: var Variablenname:Datentyp; Listing 2.6: Variablendeklaration mit Datentyp Wird der Datentyp angegeben (was nicht zwingend erforderlich ist – siehe hierzu auch die Info-Box „Automatische versus strikte Typisierung“), nennt man dies „Strikte Typisierung“. Angewandt auf einige Beispiele sieht das Ganze dann so aus: var myNumber:Number = 17; var myString:String = "Uwe"; u u u u u u u u ActionScript 3.0: int und uint ActionScript 3.0: int und uint
  23. 23. G R U N D L A G E N D E R P R O G R A M M I E R U N G 13 var myBoolean:Boolean = true; trace("Der Wert der (nicht existenten) Variable myNumber2="+myNumber2); Listing 2.7: Beispiele einiger Variablendeklarationen inklusive Wertzuweisung Automatische versus strikte Typisierung (ActionScript 1.0 und 2.0) Grundsätzlich muss im Rahmen von Flash der Datentyp nicht explizit angegeben werden, denn Flash erzeugt bei der Wertzuweisung automatisch den korrekten Datentyp, wie Sie in der nach- folgenden Zeile sehen: var myNumber = 17; Nachteilig an dieser sogenannten „Automatischen Typisierung“ ist, dass der Code fehleranfälliger wird, da man in solchen Fällen einer Variable vom (angedachten) Typ Number auch beispiels- weise einen String-Wert zuweisen könnte. Im Fall der „Strikten Typisierung“ kann dies nicht geschehen und der Compiler von Flash würde beim Veröffentlichen eine entsprechende Fehlermeldung erzeugen. Deshalb der Tipp: Versuchen Sie immer, eine strikte Typisierung zu verwenden. ActionScript 3.0 erfordert in jedem Fall eine strikte Typisierung. Es ist zwar eine Typ- umwandlung möglich, standardmäßig erfordert ActionScript 3.0 jedoch eine strikte Typisierung. 2.3.4 Gültigkeitsbereiche von Variablen Der Gültigkeitsbereich einer Variablen gibt an, in welchem Bereich des Codes eine Variable gültig ist. Anders gesprochen: Der Gültigkeitsbereich soll ausdrücken, wo im Code der Wert der Variable verfügbar ist und wo nicht. Außerhalb des Gültigkeits- bereichs existiert die Variable dann ganz einfach nicht (oder nicht mehr). Insbeson- dere im Rahmen von Funktionen und speziellen Codeblöcken (PHP, JavaScript und ActionScript) müssen wir uns um Gültigkeitsbereiche Gedanken machen. Grundlegend unterscheidet man zwischen zwei Bereichen (drei hingegen für Action- Script): Lokale Variablen: Diese sind nur innerhalb eines gewissen Codeblocks gültig und verlieren mit dem Ende des Codeblocks ihre Gültigkeit. Sie werden z.B. innerhalb von Funktionen und Schleifen eingesetzt. Globale Variablen: Diese sind überall gültig und verlieren ihre Gültigkeit erst mit Ende des Scripts. In ActionScript 3.0 wurden globale Variablen entfernt. Zeitleistenvariablen (nur in ActionScript): Diese sind für alle Codeblöcke inner- halb der Zeitleiste verfügbar. Im Rahmen der bisher erlernten Programmierung müssen Sie sich noch keine Gedan- ken über lokale, globale und Zeitleistenvariablen machen. Mit Einführung von Funk- tionen wird sich dies ändern, aber darauf werden wir Sie zu gegebenem Zeitpunkt noch konkret hinweisen. u u u ActionScript 3.0ActionScript 3.0
  24. 24. K A P I T E L 214 Flash: nicht deklarierte lokale Variablen in Codeblöcken In Flash unterscheiden wir zwischen deklarierten und nicht deklarierten Variablen innerhalb von Codeblöcken, beispielsweise Funktionen. Wird eine Variable implizit deklariert (d. h., es wird ihr ein Wert zugewiesen, ohne dass die Variable zuvor mit var deklariert wurde), verliert die Variable erst bei Ende des Scripts ihre Gültigkeit. Anders bei deklarierten Variablen: Diese verlieren mit Ende des Codeblocks ihre Gültigkeit! Superglobale Variablen und Arrays Superglobale Arrays kennt nur PHP. In Flash (bis einschließlich ActionScript 2.0) existiert ein ähnliches Array namens _global. Anhand des Namens „superglobal“ erahnen Sie wahrscheinlich schon den Sinn dieser Variablen. Superglobale Variablen sind zu jeder Zeit und an jeder Stelle in einem Script bekannt und somit les- und veränderbar. Diese werden PHP-intern in einem Array gespeichert. Was genau ein Array ist und wozu man sie verwenden kann, können Sie in diesem Kapitel in Abschnitt 2.5 nachlesen. Der Name des Arrays lautet $GLOBALS[]. Den Einsatz von $GLOBALS[] sollten wir für ein leichteres Verständnis in einem Beispiel genauer betrachten. // Definition der Variable textstring $textstring = "Info in der Variable textstring"; // Eine Funktion zum Anzeigen des Variableninhalts function showData { echo("Der Inhalt der Variable lautet: $textstring"); } showData(); Listing 2.8: Der Inhalt der Variable $textstring soll ausgegeben werden. Leider wird aber im Browser der Inhalt der Variable $textstring nicht angezeigt. Dies liegt einzig und allein daran, dass innerhalb einer Funktion Variablen nicht bekannt sind, die außerhalb dieser Funktion definiert wurden. Es existiert in der Funk- tion showData() keine Variable mit dem Namen $textstring. Um dieses Problem nun zu lösen, werden wir $GLOBALS[] einsetzen. // Definition der Variable textstring $textstring = "Info in der Variable textstring"; // Eine Funktion zum Anzeigen des Variableninhalts function showData { echo("Der Inhalt der Variable lautet: ".$GLOBALS[textstring]); } showData(); Listing 2.9: Mit dem Array $GLOBALS[] kann die Variable ausgelesen werden. PHPPHP
  25. 25. G R U N D L A G E N D E R P R O G R A M M I E R U N G 15 Wie Sie erkennen, haben wir nicht sehr viel geändert. Innerhalb der Funktion greifen wir nun nicht mehr auf die Variable $textstring, sondern auf das Element text- string im Array $GLOBALS[] zu. Bitte beachten Sie, dass der Parameter des Arrays – also der Variablenname – ohne führendes $-Zeichen aufgerufen werden kann. PHP kennt noch weitere superglobale Arrays, die uns die Arbeit zum Beispiel mit For- mulardaten sehr erleichtern: $GLOBALS $_SERVER $_GET $_POST $_COOKIE $_FILES $_ENV $_REQUEST $_SESSION Formulardaten versenden Im ersten Kapitel dieses Buchs hörten Sie bereits von GET und POST. Wenn Sie Formu- lardaten von einer Seite zu einer anderen Seite schicken und die gesendeten Daten wei- terverarbeiten möchten, benötigen Sie die superglobalen Arrays $_GET oder $_POST, wenn in der php.ini die Einstellung register_globals auf off gesetzt ist. Angenommen, Sie haben ein Kontaktformular für Ihre User erstellt, in dem ein Text- feld mit dem Namen „Vorname“ existiert. Beim Absenden des Formulars wird der Inhalt dieses Textfelds an eine weitere PHP-Seite geschickt. Nun haben Sie zwei Mög- lichkeiten zum Auslesen des Textfelds, je nachdem, ob register_globals auf off oder on gesetzt ist. Wenn off eingestellt ist, dann können Sie nur über das superglobale Array $_POST (oder $_GET) auf den Inhalt des Textfelds „Vorname“ zugreifen. $_POST[‚Vorname']; Im zweiten Fall (register_globals ist on) können Sie mit $Vorname direkt auf den Inhalt des Textfelds zugreifen. Der Name der Variable ist automatisch der Name des Textfelds. Sollten Sie noch nähere Information über die restlichen superglobalen Arrays benö- tigen, bitten wir Sie, in der PHP-Referenz nachzuschlagen. Diese finden Sie auch im Internet unter www.php.net. u u u u u u u u u u u u register_globalsregister_globals
  26. 26. K A P I T E L 216 Tipp: Ich würde Ihnen in jedem Fall empfehlen, die Eigenschaft register_globals auf off zu belassen (oder zu setzen), auch wenn es scheinbar einfacher wäre, wenn sie on ist. register_globals stellt eine nicht zu unterschätzende Sicherheitslücke dar, da PHP keinen Unterschied zwischen einer GET- oder POST-Variable mit gleichem Namen machen kann. Globale Variablen (und Funktionen) sind Variablen, die in allen Zeitleisten und allen Hierarchiebereichen, also Gültigkeitsbereichen, verfügbar sind. Lokale Variablen haben dagegen nur einen eingeschränkten Gültigkeitsbereich. Um eine globale Variable zu erzeugen, wird der Variable der Bezeichner _global vorangestellt. Globale Variablen werden nicht mit var deklariert und ihnen werden auch keine Datentypen zugewiesen. _global.myNumberGlobal = 17; Listing 2.10: Deklaration einer globalen Variable in ActionScript var myNumberLocal:Number = 17; Listing 2.11: Deklaration einer lokalen Variable in ActionScript Globale versus lokale Variablen Der Sinn der globalen Variable ist, dass sie von überall aus zugänglich ist. Natürlich wäre es nett, wenn jede Variable von überall aus zugänglich wäre, frei nach dem Motto „Weg frei für die Globalisierung jeder Variable“ ... Ein guter Programmierer zeichnet sich aber auch dadurch aus, dass er weiß, wann eine Variable global sein muss und wann eine Variable lokal sein kann. Zumeist werden Variablen nur für gewisse Bereiche benötigt – deshalb die Regel: lokal vor global! In ActionScript 3.0 existiert das Array _globals nicht mehr. Vielmehr behandelt ActionScript 3.0 alle Variablen als global, die in der root-Ebene eines Clips (oder einer externen ActionScript-Datei) definiert wurden. In JavaScript verhält es sich ähnlich wie in ActionScript – global sind Variablen dann, wenn sie auf äußerster Ebene erzeugt wurden. Beispiel: var global01 = 15; function showVariables() { var nichtglobal = 17; alert("INNERHALB: global01="+global01+"; nichtglobal="+nichtglobal); } showVariables(); alert("AUSSERHALB: global01="+global01+"; nichtglobal="+nichtglobal); Listing 2.12: Ein Beispiel für globale und lokale Variablen ActionScript bis inklusive 2.0 ActionScript bis inklusive 2.0 ActionScript 3.0ActionScript 3.0 JavaScriptJavaScript
  27. 27. G R U N D L A G E N D E R P R O G R A M M I E R U N G 17 Außerhalb der Funktion showVariables wird eine Variable global01 angelegt. Da diese Variable global ist, kann sie innerhalb der Funktion showVariables abgerufen werden: Wird die Funktion showVariables aufgerufen (vorletzte Zeile), so erhalten Sie eine funktionierende alert-Ausgabe. Innerhalb der Funktion wird zusätzlich noch die lokale Variable nichtglobal definiert. Greift man nun von „außen“ auf die loka- le Variable nichtglobal zu, so erhält man einen Fehler, da diese Variable eben nur innerhalb der Funktion showVariables existiert. 2.4 Operatoren Operatoren dienen dem Zweck, Variablenwerte miteinander zu kombinieren. Dies kann einerseits eine einfache arithmetische Addition sein, andererseits aber auch dazu dienen, logische Verknüpfungen von Zuständen zu erzeugen. 2.4.1 Arithmetische Operatoren Wie der Name schon sagt, handelt es sich hierbei um eine mathematische Verknüpfung von Werten. Im folgenden Beispiel sehen Sie die Anwendung der Operation „Addi- tion“ oder „+“: $anzahl1 = 23; $anzahl2 = 15; $anzahl3; //bis jetzt wurde anzahl3 noch kein Wert zugewiesen $anzahl3 = $anzahl1 + $anzahl2; Listing 2.13: Eine Addition in PHP ... var anzahl1 = 23; var anzahl2 = 15; var anzahl3; anzahl3 = anzahl1+anzahl2; Listing 2.14: ... in JavaScript ... var anzahl1:Number = 23; var anzahl2:Number = 15; var anzahl3:Number; anzahl3 = anzahl1+anzahl2; Listing 2.15: ... und in Flash PHPPHP JavaScriptJavaScript ActionScriptActionScript
  28. 28. K A P I T E L 218 Operatoren Numerische Werte kann man mithilfe von folgenden Operatoren miteinander ver- knüpfen: Nehmen wir für das Beispiel in der Tabelle an, die Variablen $a (bzw. a) und $b (bzw. b) erhalten die Werte $a=22 und $b=5. In $c (bzw. c) wird das Ergebnis der Berechnung gespeichert. Operator Operation Beispiel + Addition (dies gilt in JavaScript und Flash für numerische ebenso wie für String-Variablen) $c=$a+$b; (PHP) bzw.c=a+b; (JavaScript, Flash) liefert $c=27 - Subtraktion $c=$a-$b; (PHP) bzw.c=a-b; (JavaScript,Flash) liefert $c=17 * Multiplikation $c=$a*$b; (PHP) bzw.c=a*b; (JavaScript,Flash) liefert $c=110 / Division $c=$a/$b; (PHP) bzw.c=a/b; (JavaScript,Flash) liefert $c=4.4 % Modulo-Rechnung (gibt den Rest einer Division zurück) $c=$a%$b; (PHP) bzw.c=a%b; (JavaScript,Flash) liefert $c=2 Tabelle 2.1: Arithmetische Operatoren Inkrement und Dekrement Um Werte um eins zu erhöhen oder zu verringern, können Sie die Inkrement- und Dekrementoperatoren verwenden. $variable++; $variable--; Listing 2.16: In PHP ... variable++; variable--; Listing 2.17: ... und in JavaScript bzw. Flash 2.4.2 Zuweisungsoperatoren Ein Zuweisungsoperator ist Ihnen auf den vorigen Seiten bereits begegnet. Es handelt sich hierbei im einfachsten Fall um das Gleichheitszeichen „=“. Es ist dafür bestimmt, einer Variable einen Wert zuzuweisen. Neben dieser Art von Zuweisung existieren jedoch auch noch weitere Zuweisungsope- ratoren, die Sie in Tabelle 2.2 aufgelistet sehen. Der verwendete Wert kann selbstver- ständlich auch eine Variable sein – in diesem Fall passiert nichts anderes, als dass der Inhalt, sprich der Wert der Variable, ausgelesen und dieser Inhalt für die Berechnung herangezogen wird. Die Zuweisungen gelten dabei immer von rechts nach links. PHPPHP JavaScript und ActionScript JavaScript und ActionScript
  29. 29. G R U N D L A G E N D E R P R O G R A M M I E R U N G 19 Zuweisungsoperator Operation variable = Wert Einer Variable wird ein Wert zugewiesen. variable += Wert Eine Variable wird um einen Wert erhöht variable -= Wert Eine Variable wird um einen Wert verringert. variable *= Wert Eine Variable wird mit einem Wert multipliziert. variable /= Wert Eine Variable wird durch einen Wert dividiert. variable %= Wert Einer Variable wird durch einen Wert dividiert und es wird ihr der Restwert der Division zugewiesen. Tabelle 2.2: Mögliche Arten von arithmetischen Zuweisungsoperatoren. Wie Sie bereits wissen, muss eine PHP-Variable selbstverständlich ein führendes $-Zeichen besitzen. Ein Beispiel für die Anwendung des Operators +=, der zu einer Variable den Wert einer zweiten Variable hinzuaddiert: $variable1 = 23; // variable1 bekommt den Wert 23 $variable2 = 20; // variable2 bekommt den Wert 20 $variable1 += $variable2; // variable2 wird zu variable1 addiert Listing 2.18: Der Operator += in PHP … var variable1 = 23; var variable2 = 20; variable1 += variable2; Listing 2.19: ... in JavaScript ... var variable1:Number = 23; var variable2:Number = 20; variable1 += variable2; Listing 2.20: ... und in Flash In unserem Beispiel hat die variable1 nach der Addition den Wert 43, variable2 dagegen weiterhin den Wert 20. Ein weiteres Beispiel für eine Anwendung des Modulo-Operators %, der den Restwert einer Division berechnet: $variable1 = 23; // variable1 bekommt den Wert 23 $variable2 = 20; // variable2 bekommt den Wert 20 $variable3 = variable1 % $variable2; //Ergebnis: 3 Der Modulo-Operator in PHP … var variable1 = 23; // variable1 bekommt den Wert 23 var variable2 = 20; // variable2 bekommt den Wert 20 var variable3 = variable1 % variable2; //Ergebnis: 3 Listing 2.21: ... in JavaScript ... PHPPHP JavaScriptJavaScript ActionScriptActionScript PHPPHP JavaScriptJavaScript
  30. 30. K A P I T E L 220 var variable1:Number = 23; var variable2:Number = 20; var variable3:Number = variable1 % variable2; //Ergebnis: 3 Listing 2.22: ... und in Flash Die Modulo-Rechnung ist prinzipiell einfach zu verstehen, denn die Berechnung folgt dem gleichen Prinzip, wie Sie es aus der Volksschule kennen: Möchte man eine Zahl durch eine andere dividieren, so versucht man zunächst zu erkennen, wie oft die eine Zahl in der zweiten Zahl vorkommt, bis man letztendlich zu den Kommazahlen der Division gelangt. In unserem Beispiel ist die erste Zahl 23 und die zweite Zahl 20. Rechnet man 23 dividiert durch 20, so ist leicht zu erkennen, dass 20 in 23 genau ein Mal vorkommt und der Wert 3 als Rest übrig bleibt, also: 23/20 = 1 Rest 3 Die Modulo-Rechnung gibt Ihnen genau diese Restzahl als Ergebnis zurück, also: 23%20 = 3 Einige weitere Beispiele zur Modulo-Rechnung: 23%5 = 3 23%6 = 5 23%23 = 0 8%2 = 0 Verknüpfung von Strings Ein weiterer wichtiger Operator dient zur Verknüpfung von Strings. In PHP wird dafür der Operator .= verwendet. In unserem Beispiel aus Listing 2.23 würde die Variable text nach der Zuweisung den Text „Name = Uwe“ im Browser ausgeben. $text = "Name = "; $text .= "Uwe"; Listing 2.23: Verknüpfung von Texten in PHP In JavaScript und ActionScript erfolgt die Verknüpfung von Texten mithilfe des Addi- tions-Operators +=. Die Ausgabe würde hier „Name = Uwe“ lauten. var myText = "Name = "; myText += "Uwe"; Listing 2.24: Verknüpfung von Texten in JavaScript ... ActionScriptActionScript PHPPHP JavaScript und ActionScript JavaScript und ActionScript
  31. 31. G R U N D L A G E N D E R P R O G R A M M I E R U N G 21 var myText:String = "Name = "; myText += "Uwe"; Listing 2.25: ... und in ActionScript 2.4.3 Bitoperatoren Bitoperatoren sind hier nur der Vollständigkeit halber erwähnt. Sie werden bei Variab- len mit Werten in Bit- oder Byteform eingesetzt. Nähere Informationen dazu entneh- men Sie bitte der jeweiligen Sprachreferenz. 2.4.4 Logische Operatoren Logische Operatoren zählen sicher zu den wichtigsten Bestandteilen einer Program- miersprache. Sie werden dafür verwendet, um Zustände (true oder false) mitein- ander zu verknüpfen. Beispielsweise könnte man bei einer elektrischen Wechselschal- tung entweder den einen oder den anderen Lichtschalter betätigen, damit das Licht aufleuchtet – in diesem Fall würde man die beiden Lichtschalter gedanklich mit einem „oder“ verknüpfen. Logische Operatoren Operation and logische UND-Verknüpfung (in Flash veraltet) && logische UND-Verknüpfung or logische ODER-Verknüpfung (in Flash veraltet) xor logische Entweder-oder-Verknüpfung (gilt nur für PHP) || logische ODER-Verknüpfung ! logisches NICHT Tabelle 2.3: Die wichtigsten logischen Operatoren Punkt vor Strich Wichtig ist immer die Rangordnung der Operatoren: Ähnlich wie in der Mathematik- stunde in der Schule gilt die Punkt-vor-Strich-Regel, wobei && der Punkt- und || der Strichrechnung zuzuweisen ist. Sollte ein Rechenvorgang allein mit Punkt- und Strich- rechnung nicht ausführbar sein, stehen Ihnen genau wie in der Algebra Klammern zur Verfügung, wobei dieselben Klammersetzungsregeln gelten. Werte prüfen Mit den logischen Operatoren ist es weiterhin möglich, in Kombination mit Bedingungen Werte auf „Richtig“ (true) oder „Falsch“ (false) zu prüfen. Beispiele finden Sie etwas später bei den Bedingungen im Abschnitt 2.6. Der Grund für jeweils zwei logische UND- und ODER-Verknüpfungen in PHP liegt einzig in der Rangordnung der Operatoren: && ist „stärker“ als and und wird deshalb zuerst ausgeführt; Gleiches gilt für || vor or.
  32. 32. K A P I T E L 222 Die Wirkungsweise der einzelnen Operationen sehen Sie in der nachfolgenden Tabelle. Variable 1 Variable 2 AND- (&&-) Verknüpfung OR- (||-) Verknüpfung XOR-Verknüpfung (nur PHP) false false false false false false true false true true true false false true true true true true true false Tabelle 2.4: Verschiedene Verknüpfungsoperatoren angewandt auf zwei Variablen 2.4.5 Vergleichsoperatoren Um Werte miteinander zu vergleichen, benötigen wir Vergleichsoperatoren. Folgende Möglichkeiten stehen uns dabei zur Verfügung: Vergleichsoperatoren Operation == Gleichheit der Werte != Ungleichheit der Werte === Gleichheit der Werte und des Datentyps („Strikte Gleichheit“) !== Ungleichheit der Werte oder des Datentyps („Strikte Ungleichheit“) > größer als < kleiner als >= größer als oder gleich <= kleiner als oder gleich Tabelle 2.5: Vergleichsoperatoren Das Resultat eines Vergleiches ist immer ein boolescher Wert, denn einem Vergleich geht stets eine „Frage“ voran, wobei die Antwort auf diese Frage immer entweder „ja“ (true) oder „nein“ (false) lautet. Der Vergleich selbst ist nichts anderes als beispiels- weise die Frage, ob ein Wert kleiner gleich einem anderen Wert ist. 2.4.6 Rangordnung der Operatoren Nachfolgend finden Sie die Rangordnung der Operatoren, wobei diejenigen, die in derselben Zeile aufgeführt sind, gleichberechtigt sind. Am stärksten sind demnach die Operatoren !, ~, ++ und --, am schwächsten das or (die bitweisen Operatoren haben wir in diese Liste ebenso mit aufgenommen): 1. ! , ~, ++, -- 2. *, /, % 3. +, -, . 4. <<, >> 5. <, <=, >, >=
  33. 33. G R U N D L A G E N D E R P R O G R A M M I E R U N G 23 6. ==, != , ===, !== 7. & 8. | 9. && 10. || 11. ?, : 12. =, +=, -=, *=, /=, .= , %=, &=, |=, <<=, >>= 13. and 14. or In folgendem Beispiel wird mit diesen Rangordnungen gearbeitet. var a:Number = 17, b:Number = -3, c:Number = 11; var d:Number = 200, ergB:Boolean, ergN:Number; var bool1:Boolean = true, bool2:Boolean = false; ergN = ++a*17-d; //(1+17)*17-200=106; a hat sich von 17 auf 18 erhöht ergB = ergN==89 //false ergN = (a*d+b)%5-c*d; // (18*200-3)%5-11*200 = 3597%5-2200 = 2-2200 = -2198 ergB = ergN !=-250 && bool2; /* Erklärung: Zunächst wird überprüft, ob der Inhalt von ergN ungleich (!=) -250 ist. Nachdem dies der Fall ist, ergibt der Vergleich den Wert true. Dieser wird danach mit dem Inhalt von bool2 mit UND verknüpft. Da bool2 den Wert false aufweist, ist das Ergebnis der UND-Verknüpfung ebenfalls false. Somit wird der Variable ergB der Wert false zugewiesen. Beachten Sie bitte, dass sich a durch die Operation ++a von 17 auf 18 erhöht hat! -2198!=250 && false = true && false = false */ Listing 2.26: Einige Beispiele zur Reihenfolge von Operationen
  34. 34. K A P I T E L 224 2.5 Arrays Arrays sind für die Arbeit eines jeden Programmierers von großer Bedeutung. Sie können sich einen Array als einen Datenpool oder – einfacher – als Tabelle vorstellen. Jeder dieser Werte des Datenpools ist in einem eigenen Bereich gespeichert. Arrays könnte man auch mit einem Setzkasten vergleichen, in dem jede Figur einen eigenen Platz hat. Am Anfang dieses Kapitels haben wir für ein Online-Spiel den Nicknamen des Users benötigt. Wenn wir nun dieses Beispiel erweitern und pro User zusätzliche Daten wie Vorname, Nachname, Adresse und Wohnort speichern möchten, benötigten wir sehr viele Variablen, vor allem wenn mehrere User an unserem Online-Spiel teilnehmen. Dieses Problem können wir mit Arrays in den Griff bekommen. Zunächst einmal die Syntax zur Array-Erstellung: $myArray = array(); Listing 2.27: In PHP ... var myArray = new Array(); Listing 2.28: ... in JavaScript ... var myArray:Array = new Array(); Listing 2.29: ... und in Flash Arrays in Flash und JavaScript In JavaScript und Flash spricht man im Fall von Arrays von „Objekten“ (man spricht auch von der „Klasse der Arrays“), in PHP gehören sie zu den „komplexen Datentypen“. Bei der Verwendung in JavaScript und Flash ist daher darauf zu achten, dass beim Erzeugen der Konstruktor new Array() verwendet wird. Es gibt unterschiedliche Arten, Werte in den Arrays zu speichern: Unterschieden wird dabei zwischen indizierten und assoziativen Arrays. 2.5.1 Indizierte Arrays Die Werte eines Arrays werden immer durch eine fortlaufende Nummer gekennzeich- net. Indizierte Arrays beginnen immer bei 0, deshalb spricht man gern von „zero- based“ Elementen. Das zweite Element des Arrays bekommt die Nummer 1, das dritte die Nummer 2 zugewiesen usw. Das letzte Element eines Arrays mit fünf Elementen hat also die Nummer 4. $arrUser = array("Uwe", "Uwe", "Mutz"); Listing 2.30: In PHP ... Arrays erstellenArrays erstellen Werte in Arrays speichern Werte in Arrays speichern
  35. 35. G R U N D L A G E N D E R P R O G R A M M I E R U N G 25 var arrUser = new Array("Uwe", "Uwe", "Mutz"); Listing 2.31: ... in JavaScript ... var arrUser:Array = new Array("Uwe", "Uwe", "Mutz"); Listing 2.32: ... und in Flash Möchten wir nun den Usernamen des Users aus dem Array $arrUser/arrUser aus- geben, müssten wir folgenden Code schreiben. echo($arrUser[0]); //Ausgabe in den Browser Listing 2.33: In PHP ... alert(arrUser[0]); //Ausgabe in einer Alert-Box Listing 2.34: ... in JavaScript ... trace(arrUser[0]); //Ausgabe in das Ausgabefenster Listing 2.35: ... und in Flash Elementname Nummer (Index) des Elements Wert $arrUser[0] 0 Uwe $arrUser[1] 1 Uwe $arrUser[2] 2 Mutz Tabelle 2.6: Inhalte des indizierten Arrays $arrUser (gleichermaßen gültig für arrUser in JavaScript und Flash) 2.5.2 Assoziative Arrays Bei einem assoziativen Array („Hash-Table“) werden die Werte nicht durch fortlau- fende Nummern gekennzeichnet, sondern durch eine eindeutige Bezeichnung wie bei Variablen. Arrays erstellen Das Erzeugen „echter“ assoziativer Arrays ist nur in PHP möglich – in JavaScript und ActionScript läuft die Sache etwas anders, denn hier müsste man Objekte in Arrays verschachteln – sollten Sie „um die Burg“ assoziative Arrays in Flash oder JavaScript benötigen, so empfehle ich Ihnen die ActionScript- bzw. JavaScript-Referenz. Werfen wir zunächst einen Blick auf PHP. Um diesen Array-Typ zu erstellen, benötigen wir den Operator =>. $arrUser = array( "Nickname" => "Uwe", "Vorname" => "Uwe", PHPPHP
  36. 36. K A P I T E L 226 "Nachname" => "Mutz" ); Jetzt hat jeder Wert des Arrays eine eindeutige Bezeichnung erhalten. Man spricht hier auch vom „Key“ und dessen „Value“. Elementname Key Value $arrUser["Nickname"] Nickname Uwe $arrUser["Vorname"] Vorname Uwe $arrUser["Nachname"] Nachname Mutz Tabelle 2.7: Inhalte des assoziativen Arrays $arrUser Mehrdimensionale Arrays Im Moment haben wir nur eindimensionale Arrays erzeugt, die man mit einzeiligen Tabellen vergleichen kann, bei denen alle Werte hintereinander in den Zellen der Tabelle gespeichert werden. Möglich ist aber auch der Einsatz von mehrdimensionalen Arrays. Angenommen, wir möchten alle User unseres Online-Spiels mit deren Nicknamen, Vornamen und Nachnamen speichern, so wäre der Einsatz eines mehrdimensionalen Arrays denkbar und sinnvoll: $arrUser = array("User1" => array("Uwe", "Uwe", "Mutz"), "User2" => array("Uwe", "Uwe", "Mutz")); Das Array $arrUser hat zwei Elemente User1 und User2. Diese Elemente sind wie- derum selbst Arrays, in denen dann die eigentlichen Werte gespeichert werden. Möch- ten wir nun den Nachnamen des Users 2 ausgeben, schreiben wir folgenden Code: echo($arrUser["User2"][2]); Bei der Ausgabe müssen wir nur Schritt für Schritt vom äußersten Array in das gewünschte Array wandern. Unser Array $arrUser beinhaltet ein assoziatives Array namens User2 und dieses beinhaltet wiederum ein „normales“ Array. Mit [2] geben wir somit nur die Stelle im Array User2 an, an der der Nachname gespeichert wurde. Natürlich könnten wir das zweite Array auch assoziativ aufbauen: $arrUser = array("User1" => array("Nickname" => "Uwe", "Vorname" => "Uwe", "Nachname" => "Mutz"), "User2" => array("Nickname" => "Uwe", "Vorname" => "Uwe", "Nachname" => "Mutz")); Um wieder den Nachnamen des zweiten Users auszugeben, schreiben wir nun: echo($arrUser["User2"]["Nachname"]); Äquivalent können wir dieses Beispiel in JavaScript und ActionScript nicht umsetzen, da es wie erwähnt in JavaScript und ActionScript keine assoziativen Arrays gibt. Der Ausweg hier führt über Objekte, die innerhalb von Arrays angelegt werden. JavaScript und ActionScript JavaScript und ActionScript
  37. 37. G R U N D L A G E N D E R P R O G R A M M I E R U N G 27 Mehrdimensionale Arrays (jedoch nicht assoziativ) anzulegen, ist jedoch auch in JavaScript und ActionScript kein Problem: var arrUser = new Array("User1", "User2"); //macht keinen Sinn! arrUser[0] = new Array("Uwe", "Uwe", "Mutz"); arrUser[1] = new Array("Alex", "Alexander", "Grasser"); alert("Bezeichnung des ersten Eintrags der User-Tabelle: "+arrUser[0]); alert("Nachname des zweiten Users: "+arrUser[1][2]); Listing 2.36: Ein mehrdimensionales Array, wobei die erste Zeile in dieser Form wenig Sinn macht Mehrdimensionale Arrays werden nach dem Muster: var myArray = new Array(); myArray[n] = new Array(); angelegt, wobei n eine beliebige Stelle im Array ist. Sollte an Stelle n des Arrays myAr- ray bereits ein Inhalt vorhanden sein, so wird dieser überschrieben. Aus diesem Grund ergibt die erste Zeile in Listing 2.36 keinen Sinn, da die Einträge „User1“ und „User2“ in den nächsten Zeilen gleich wieder überschrieben werden. Sinnvoll ist daher anstatt dieser Zeile die folgende: var arrUser = new Array(); Selbiges gilt in Flash, wobei in diesem Fall noch die Typisierung hinzukommt: var arrUser:Array = new Array(); arrUser[0] = new Array("Uwe", "Uwe", "Mutz"); arrUser[1] = new Array("Alex", "Alexander", "Grasser"); trace("Bezeichnung des ersten Eintrags der User-Tabelle: "+arrUser[0]); trace("Nachname des zweiten Users: "+arrUser[1][2]); Listing 2.37: Mehrdimensionale Arrays in Flash nach demselben Muster wie in JavaScript, nur mit zusätzli- cher strikter Typisierung Vielleicht haben Sie sich schon die Frage gestellt, ob es nicht eigentlich var myArray = new Array(); var myArray[0] = new Array(); heißen müsste – also mit einem zusätzlichen var in der zweiten Zeile. Nun, diese Art der Schreibweise ist aufgrund des inneren Aufbaus der Arrays als Objekte nicht zuläs- sig – Details dazu finden Sie in der Objektorientierten Programmierung (OOP). JavaScriptJavaScript
  38. 38. K A P I T E L 228 2.6 Bedingungen In der Programmierung gibt es oft Situationen, in denen ein Programmblock nur unter einer gewissen Bedingung ausgeführt werden soll. Diese Bedingung muss geprüft und daraufhin eine Entscheidung getroffen werden, wie das Script weiterverarbeitet wer- den soll. Fällt die Entscheidung positiv aus, wird der Programmblock ausgeführt, ist sie negativ, kann an dieser Stelle beispielsweise abgebrochen werden. 2.6.1 if-Bedingung Die gültige Syntax ist: if(Bedingung) { Programmblock, falls die Bedingung zutrifft } else { Programmblock, falls die Bedingung nicht zutrifft } Listing 2.38: Syntax für if-Bedingungen Was genau ist nun eine Bedingung und was liefert sie für Resultate? Nun, eine Bedin- gung ist in den meisten Fällen ein Vergleich zweier (oder mehrerer) Werte. Man kann Vergleiche in Bezug auf „gleich (==)“, „kleiner (<)“, „größer (>)“ usw. anstellen – das haben Sie im letzten Abschnitt bereits erfahren. Das Resultat ist dann immer eine Antwort des Systems, das sagt: „Wert 1 ist gleich Wert 2“ oder „Wert 1 ist nicht gleich Wert 2“, wenn man mit == auf Gleichheit prüft. Der Programmcode für dieses Beispiel würde folgendermaßen aussehen: if (Wert1 == Wert2) { //Wert1 ist gleich Wert2 } else { //Wert1 ist nicht gleich Wert2 }
  39. 39. G R U N D L A G E N D E R P R O G R A M M I E R U N G 29 Ein einfaches Beispiel vergleicht die Variablen a und b miteinander und ermittelt, wel- che der beiden Variablen den größeren Wert beinhaltet: $a = 23; //einen fiktiven Wert eingeben, wie z.B. 23 $b = 17; if ($a > $b) { echo("$a ist groesser als $b"); } else { echo("$b ist groesser oder gleich $a"); } Listing 2.39: In PHP ... var a = 23; var b = 17; if(a>b) { alert("a ist groesser als b"); } else { alert("b ist groesser oder gleich a"); } Listing 2.40: ... in JavaScript ... ABBILDUNG 2.1 Schematische Darstellung einer if-Bedingung
  40. 40. K A P I T E L 230 var a:Number = 23; var b:Number = 17; if(a>b) { trace("a ist groesser als b"); } else { trace("b ist groesser oder gleich a"); } Listing 2.41: ... und in ActionScript Geschweifte Klammern bei Programmblöcken Vielleicht ist Ihnen in der Syntax des obigen Beispiels aufgefallen, dass nach der Über- prüfung der Bedingung (die übrigens immer in runden Klammern stehen muss) eine geschweifte Klammer „{„ geöffnet wird. Dies deutet an, dass die nachfolgenden Code- zeilen zum if-Befehl gehören. Gleiches gilt für den else-Teil. 2.6.2 switch-Bedingung Das Problem der if-Bedingung ist, dass diese Bedingung immer nur auf einen Wert überprüft, also eine Fallunterscheidung nur durch Verschachtelung möglich ist. Muss auf sehr viele verschiedene Werte überprüft werden, so wird eine solche Fallunterschei- dung mit verschachtelten if-Bedingungen sehr schnell sehr unübersichtlich. Abhilfe schafft hier die switch-Bedingung, die eine Variable auf beliebig viele verschiedene Werte überprüft und je nachdem verschiedene Programmblöcke ausführt. Werfen wir einen Blick auf die Syntax: switch (Variable) { case Wert 1: //Programmblock 1 break; case Wert 2: //Programmblock 2 break; ... case Wert n: //Programmblock n break; default: Zeichenketten vergleichen Wenn Sie Zeichenketten vergleichen, benutzen Sie === oder !==, da hier auch der Datentyp verglichen wird. Einzeiliger Programmcode Sollte der Programmblock aus nur einer einzigen Zeile bestehen, könnte man die geschweiften Klammern weglassen. In Hinblick auf andere Programmiersprachen sollte man sie aber auch bei nur einer Zeile setzen.
  41. 41. G R U N D L A G E N D E R P R O G R A M M I E R U N G 31 //Programmblock, falls keiner der Werte auf die Variable zutrifft } Listing 2.42: Syntax für switch-Bedingungen Die Variable wird Schritt für Schritt auf die Werte überprüft. Trifft einer der innerhalb des switch-Blocks aufgelisteten Werte auf die Variable zu, so wird der zugehörige Programmblock ausgeführt; trifft keiner der Werte auf die Variable zu, so wird der Programmblock im default-Teil ausgeführt. Dieser default-Teil kann aber auch gänzlich wegfallen – sollte also kein Wert auf den Inhalt der Variable zutreffen, würde einfach gar nichts geschehen. Die break-Anweisung sorgt dafür, dass der nachfolgende Code innerhalb der switch-Anweisung nicht mehr ausgeführt wird – hierdurch wird das Abarbeiten des Codes schneller. 2.7 Schleifen Ein weiterer wichtiger Bestandteil in der Programmierung sind Schleifen. Sie kommen immer dann zum Einsatz, wenn ein Block von Befehlen mehrmals hintereinander ablaufen soll. Grundsätzlich unterscheidet man zwischen Schleifen mit einer festen Anzahl von Durchläufen und solchen mit einer variablen Anzahl von Durchläufen. 2.7.1 for-Schleife Beginnen wir bei einer Schleife mit einer festen Anzahl von Durchläufen, der for- Schleife. Die for-Schleife benötigt drei Werte, die gesetzt werden müssen: Startwert einer sogenannten Zähl- oder Schleifenvariable Abbruch- oder Ende-Bedingung Zählvariablen-Inkrement Zählvariable Die Zählvariable ist die Variable, die die Anzahl der Schleifendurchläufe zählt. In der obigen Auflistung steht „Startwert einer Zählvariablen“. Dies bedeutet, dass dieser Variablen ein Anfangswert zugewiesen wird. Oftmals wird als Startwert der Wert „0“ verwendet; es muss aber nicht so sein. Sie sollten sich dies aber nicht so vorstellen, dass pro Schleifendurchlauf die Variable um eins erhöht wird (was als Spezialfall natürlich möglich ist und oft verwendet wird), sondern die Zählvariable wird um den Wert des Zählvariablen-Inkrements verändert. Wir schreiben an dieser Stelle bewusst „verändert“ und nicht „erhöht“, weil die Vari- u u u
  42. 42. K A P I T E L 232 able genauso um einen gewissen Wert verringert werden könnte, je nachdem, was im Zählvariablen-Inkrement angegeben ist. Abbruchbedingung Die Abbruchbedingung überprüft die Zählvariable pro Schleifendurchlauf auf einen gewissen Wert. Sollte dieser Wert (je nach Art der Bedingung) über- oder unterschrit- ten werden, wird die Schleife abgebrochen, sprich, sie wird nicht mehr ausgeführt. Endlosschleife Wichtig hierbei ist, dass die Abbruchbedingung auch wirklich irgendwann erreicht werden kann, ansonsten haben Sie eine sogenannte Endlosschleife programmiert. Dies führt zu einer Überlastung des Prozessors und wird im Allgemeinen vom Betriebssys- tem nach einer gewissen Zeit automatisch abgebrochen, was logischerweise zur Folge ABBILDUNG 2.2 Schematische Darstellung einer for-Schleife
  43. 43. G R U N D L A G E N D E R P R O G R A M M I E R U N G 33 hat, dass die PHP- oder Flash-Datei bzw. JavaScript-Anwendung nicht mehr weiter ausgeführt wird. Warum all der Aufwand mit der Zählvariable? Wenn sie nur dafür da ist, dass man die Anzahl der Durchläufe auf alle möglichen Arten abprüft, hätte sich der Aufwand nicht gelohnt. Der Grund dafür ist, dass die Variable selbst im Programmblock der Schleife sehr oft als ganz normale Variable verwendet wird. Die korrekte Syntax der for-Schleife lautet: for(Initialisierung der Zählvariablen; Abbruchbedingung; Inkrement) { Programmblock } Listing 2.43: Syntax für for-Schleifen Initialisierung der Schleife Die Initialisierung kann z.B. wie folgt aussehen: for($i = 0; …) //Zählvariable $i mit Startwert 0 for($a = 23; …) //Zählvariable $a mit Startwert 23 for($i = -17; …) //Zählvariable $i mit Startwert -17 Listing 2.44: In PHP ... for(var i:Number = 0; ...) //Zählvariable i mit Startwert 0 for(var a:Number = 23; ...) //Zählvariable a mit Startwert 23 for(var i:Number = -17; ...) //Zählvariable i mit Startwert -17 Listing 2.45: ... in JavaScript ... for(var i = 0; ...) //Zählvariable i mit Startwert 0 for(var a = 23; ...) //Zählvariable a mit Startwert 23 for(var i = -17; ...) //Zählvariable i mit Startwert -17 Listing 2.46: ... und in Flash Typischerweise werden als Variablennamen für Zählvariablen die Buchstaben i, j, k usw. verwendet, einen besonderen Grund gibt es dafür wohl nicht. Typische Abbruchbedingungen Typische Abbruchbedingungen sind: for($i = 0; $i<15; ...) for($a = 23; $a>15; ...)
  44. 44. K A P I T E L 234 /* falls $a pro Schleifendurchlauf erhöht wird, ist die obige Schleife eine Endlosschleife; falls $a verringert wird, wird die Abbruchbedingung erreicht */ for(var $i = -17; $i<0; ...) Listing 2.47: In PHP ... for(var i = 0; i<15; ...) for(var a = 23;a>15; ...) for(var i = -17; i<0; ...) Listing 2.48: ... in JavaScript ... for(var i:Number = 0; i<15; ...) for(var a:Number = 23;a>15; ...) for(var i:Number = -17; i<0; ...) Listing 2.49: ... und in Flash Inkrement Nun müssen wir uns noch um das Zählvariablen-Inkrement kümmern. Wir können die Zählvariable pro Durchlauf entweder verringern oder erhöhen, die Frage ist nur, um welchen Wert wir verringern oder erhöhen. Oft wird die Variable pro Schleifen- durchlauf um eins erhöht, das muss aber eben nicht so sein. Möchte man um eins erhöhen, würde man schreiben: $i = $i+1; //erhöht die Variable i um eins Dies bedeutet, dass der neue Wert der Variablen i 1 aus dem alten Wert 2 plus eins 3 errechnet wird. Diese Schreibweise ist speziell in diesem Fall nicht besonders üblich, vielmehr schreibt man: $i++; //erhöht die Variable i um eins Listing 2.50: in PHP ... i++; //erhöht die Variable i um eins Listing 2.51: ... und in JavaScript bzw. Flash Eine weitere allgemeinere Schreibweise ist: $i += 1; //erhöht die Variable i um eins $i += 3; //erhöht die Variable i um drei $i -= 1; //verringert die Variable i um eins Listing 2.52: In PHP ...
  45. 45. G R U N D L A G E N D E R P R O G R A M M I E R U N G 35 i += 1; //erhöht die Variable i um eins i += 3; //erhöht die Variable i um drei i -= 1; //verringert die Variable i um eins Listing 2.53: ... und in JavaScript bzw. Flash Beispiele von for-Schleifen Damit sind wir in der Lage, komplette Schleifen zu programmieren. Sehen wir uns nun einige Beispiele von for-Schleifen an: for($i=0; $i<10; $i++) { echo("i = $i"); /* Diese Schleife beginnt mit $i = 0; $i wird pro Schleifendurchlauf um eins erhöht und es wird pro Durchlauf abgeprüft, ob $i immer noch kleiner als 10 ist; ist das irgendwann nicht mehr der Fall, wird die Schleife abgebrochen. Insgesamt sind es 10 Schleifendurchläufe */ } for($i = -17; $i<30; $i+= 3) { echo("i = $i"); //16 Durchläufe } Listing 2.54: In PHP ... for(var i =0; i<10; i++) { alert("i = "+i); } for(var i = -17; i<30; i+= 3) { alert("i= "+i); //16 Durchläufe } Listing 2.55: ... in JavaScript ... for(var i:Number=0; i<10; i++) { trace("i = "+i); } for(var i:Number = -17; i<30; i+= 3) { trace("i= "+i); //16 Durchläufe } Listing 2.56: ... und in Flash
  46. 46. K A P I T E L 236 Jetzt ein praktisches Beispiel. Sie erinnern sich sicher noch an unser Array mit den Userdaten. Mit echo($arrUser[0]) haben wir den Nicknamen ausgegeben. Nun möchten wir alle Daten des Users ausgeben. // Erstellen des Arrays $arrUser = array("Uwe", "Uwe", "Mutz"); //Ausgabe des Arrays mit einer for-Schleife for($i=0; $i<3; $i++){ echo($arrUser[$i]."<br />"); } Mit diesen paar Zeilen werden alle Daten des Arrays durch Zeilenumbrüche getrennt ausgegeben: Die verwendete for-Schleife wird dreimal durchlaufen, weil wir als Start- wert 0 und als maximalen Wert 2 (< 3) definiert haben. Somit hat $i beim ersten Durchlauf der Schleife den Wert 0 und holt den Wert an der Stelle 0 aus unserem Array $arrUser[]. Beim nächsten Durchlauf hat $i den Wert 1 und wir lesen den Wert an der Stelle 1 aus unserem Array aus usw. Anzahl der Elemente eines Arrays Wir haben nur ein Problem, denn die for-Schleife läuft im Moment nur von Index 0 bis Index 2. Sobald mehr Daten in das Array gespeichert werden, würde ein Wert mit zum Beispiel Index 3 oder Index 4 nicht ausgegeben werden. Zu lösen ist das Problem über eine PHP-Funktion, die die Anzahl der Werte eines Arrays zurückgibt. Hier können wir zwischen der Funktion count() und sizeOf() wählen. Welche Funktion Sie nutzen, ist egal. Beide geben die Anzahl der Elemente eines Arrays zurück. for($i=0; $i<sizeof($arrUser); $i++){ echo($arrUser[$i]."<br />"); } In ActionScript sähe der Code wie folgt aus, die Erklärung kann im Wesentlichen von oben übernommen werden: var arrUser:Array = new Array("Uwe","Uwe","Mutz"); for(var i:Number=0; i<arrUser.length; i++) { trace("arrUser["+i+"] = "+arrUser[i]); } Entgegen der Beschreibung von oben wird in Flash zur Ermittlung der Anzahl der Einträge in einem Array die Eigenschaft length des Arrays verwendet. PHPPHP ActionScriptActionScript
  47. 47. G R U N D L A G E N D E R P R O G R A M M I E R U N G 37 var arrUser = new Array("Uwe","Uwe","Mutz"); for(var i =0; i<arrUser.length; i++) { alert("arrUser["+i+"] = "+arrUser[i]); } JavaScript ist – wie Sie ja wissen – sehr ähnlich wie ActionScript aufgebaut (nachdem beide demselben Standard angehören, ist das auch nicht wirklich schwer ...) – einzig die strikte Typisierung fehlt uns in JavaScript. 2.7.2 for...each- oder for...in-Schleife Die for...each-Schleife steht uns in PHP speziell für Arrays zur Verfügung, in JavaScript und Flash verwendet man sie auch gern zum Auslesen aller Eigenschaften und Methoden eines Objekts. Dort ist sie als for...in-Schleife bekannt. Diese Schleife löst unser Problem der for-Schleife, dass die Anzahl der Einträge des Arrays nicht bekannt ist, denn mit einer for...each-Schleife werden alle Felder des Arrays durchlaufen. Hier zunächst die Syntax der for...each-Schleife: foreach($array as element) { Programmblock; } Listing 2.57: In PHP ... for(element in myArray) { Programmblock; } Listing 2.58: ... und in JavaScript bzw. Flash Unser voriges Beispiel mit einer for...each-Schleife würde demnach wie folgt aus- sehen: // Erstellen des Arrays $arrUser = array("Uwe", "Uwe", "Mutz"); //Ausgabe des Arrays mit einer for...each-Schleife foreach($arrUser as $userdaten){ echo($userdaten."<br />"); } Listing 2.59: In PHP ... JavaScriptJavaScript
  48. 48. K A P I T E L 238 var arrUser:Array = new Array("Uwe","Uwe","Mutz"); for(element in arrUser) { trace("arrUser["+element+"] = "+arrUser[element]); } Listing 2.60: ... in JavaScript ... var arrUser = new Array("Uwe","Uwe","Mutz"); for(element in arrUser) { alert("arrUser["+element+"] = "+arrUser[element]); } Listing 2.61: ... und in Flash Für die Verarbeitung eines assoziativen Arrays müssen wir die for...each-Schleife noch etwas erweitern. Die Syntax für das Durchlaufen eines assoziativen Arrays lau- tet: foreach($array as key => value){ Programmblock; } Listing 2.62: Syntax für eine for...each-Schleife in einem assoziativen Array Wie schon bei der Erstellung eines assoziativen Arrays benötigen wir den Operator =>. // Erstellen des Arrays $arrUser = array( "Nickname" => "Uwe", "Vorname" => "Uwe", "Nachname" => "Mutz" ); // Ausgabe des assoziativen Arrays mit einer for...each-Schleife foreach($arrUser as $key => $value){ echo("$key: <b>$value</b><br />"); } Wissenswertes zur for...in-Schleife in Flash Mithilfe der for...in-Schleife in Flash können zwar beinahe, jedoch nicht alle Eigenschaften und Methoden von Objekten ermittelt werden. Hierzu verweise ich auf die ActionScript- Referenz, die Sie auf der Site von Macromedia (www.macromedia.com) im Menüpunkt SUPPORT > DOKUMENTATION finden. Des Weiteren listet die for...in-Schleife die eingetragenen Elemente nicht in der Reihenfolge des Vorkommens auf. Dies wird speziell im Fall des Auslesens von Array-Elementen interessant. PHPPHP
  49. 49. G R U N D L A G E N D E R P R O G R A M M I E R U N G 39 Seit ActionScript 3.0 existiert in Flash nun auch eine for each..in-Schleife, die primär zum Durchlaufen von Objekten eines bestimmten Typs verwendet wird. Sol- che Objekte sind beispielsweise XML- oder XMLList-Objekte. Im Gegensatz zu einer for...in-Schleife wird über den Iterator der Schleife der Wert und nicht der Name der jeweiligen Eigenschaft ermittelt. Als Beispiel arbeiten wir uns durch ein XML-Objekt, um alle Werte auszugeben: var myXML:XML = <Playliste> <song src="BeAWarrior.mp3">Be a Warrior</song> <song src="WarriorsOfTheWasteland.mp3">Warriors of the Wasteland</ song> </Playliste>; for each (var item in myXML.song) { trace("item="+item); } Als Ausgabe erhalten wir „Be A Warrior“ und „Warriors of the Wasteland“. 2.7.3 do..while-Schleife Diese und die nächste Schleife sind Vertreter von Schleifen mit einer variablen Anzahl von Durchläufen. Damit kommen wir mehr denn je in die Situation, dass wir selbst überprüfen müssen, dass die Schleife auch wirklich jemals abbricht. Sorgen wir pro- grammiertechnisch nicht für die Möglichkeit des Schleifenendes, erzeugen wir die schon bei der for-Schleife angesprochene Endlosschleife. Mindestens einmal durchlaufen Bei der do..while-Schleife wird der Programmblock, der sich in ihr befindet, auf jeden Fall einmal durchlaufen. Die Bedingung, ob die Schleife ein weiteres Mal durch- laufen wird, hängt von der Abbruchbedingung ab, die aber erst am Ende der Schleife überprüft wird. Boolesche Werte Genauso wie bei der for-Schleife (und jeder anderen Situation, in der Bedingungen gefordert sind) liefert die Bedingung einen booleschen Wert. Oft wird anstatt der Bedingung selbst einfach eine boolesche Variable verwendet, deren Wert dann für einen weiteren Schleifendurchlauf oder einen Schleifenabbruch entsprechend gesetzt wird. Der Variable wird dann z.B. innerhalb der Schleife ein Wert zugewiesen, damit die Schleife abbrechen kann. Werfen wir einen Blick auf die Syntax: for each..in in ActionScript 3.0 for each..in in ActionScript 3.0
  50. 50. K A P I T E L 240 do{ //Programmblock } while(Bedingung); Listing 2.63: Syntax für do..while-Schleifen Die do..while- und die while-Schleife werden dann verwendet, wenn man nicht sicher ist, wie oft die Schleife durchlaufen werden soll. 2.7.4 while-Schleife Entgegen der oben beschriebenen do..while-Schleife läuft die while-Schleife nicht notwendigerweise durch. Trifft die Bedingung schon von Beginn an nicht zu, führt kein Weg in das Innere der Schleife. Die korrekte Syntax ist: while(Bedingung) { //Programmblock } Listing 2.64: Syntax für while-Schleifen ABBILDUNG 2.3 Schematische Darstellung einer do..while-Schleife
  51. 51. G R U N D L A G E N D E R P R O G R A M M I E R U N G 41 Die Anmerkungen zur Abbruchbedingung bei der do..while-Schleife gelten hier natürlich entsprechend. Hilfreiches bei Schleifen: break und continue Zwei Befehle sind im Zusammenhang mit Schleifen oft hilfreich: break: veranlasst den Interpreter, zum Beispiel den Flash-Player, die Schleife zu verlassen, ohne dass die Bedingung noch weiter geprüft wird. continue: veranlasst den Interpreter, zur Bedingungsprüfung zu springen, ohne dass die restli- chen Zeilen des Programmblocks weiter ausgeführt werden. 2.8 Funktionen Bisher haben wir die notwendigen Grundlagen der Programmierung betrachtet. Sie sind bereits jetzt in der Lage, einfachere Programme zu schreiben. Auf den nächs- ten Seiten lernen Sie die Möglichkeit kennen, Programmteile erst bei Bedarf auszu- führen. u u ABBILDUNG 2.1 Schematische Abbildung einer while-Schleife
  52. 52. K A P I T E L 242 Funktionen bieten uns bei der Programmierung zwei entscheidende Vorteile: Funktionen können bei Bedarf – also erst dann, wenn man diesen Programmblock wirklich braucht – aufgerufen werden. Funktionen lassen sich beliebig oft aufrufen. Funktionen können Ergebnisse an das Hauptprogramm zurückgeben. Stellen Sie sich zum Beispiel ein Computerspiel vor: Jedes Mal, wenn der Spieler mit seinem Raumschiff abgeschossen wird, soll die Anzahl seiner „Leben“ um eins redu- ziert werden. Das wäre ein Beispiel dafür, dass ein Programmblock nur bei Bedarf und so oft man will abgerufen werden kann. Funktionsdeklaration Sehen wir uns die korrekte Syntax der Funktionsdeklaration für verschiedene Anwen- dungsmöglichkeiten einmal an. Funktionen werden dabei immer durch das Schlüssel- wort function eingeleitet. 1. Funktion, an die weder Daten übergeben noch von der Daten zurückgegeben werden: function Funktionsname() { Programmblock } 2. Funktion, an die Daten übergeben, von der jedoch keine Daten zurückgegeben werden: function Funktionsname(Variablensatz) { Programmblock } 3. Funktion, an die keine Daten übergeben, von der jedoch Daten zurückgegeben werden: function Funktionsname() { Programmblock return Variable / Wert; } 4. Funktion, an die sowohl Daten übergeben als auch Daten von ihr zurückgegeben werden: function Funktionsname(Variablensatz) { Programmblock u u u
  53. 53. G R U N D L A G E N D E R P R O G R A M M I E R U N G 43 return Variable / Wert; } Übergabe von Daten und Rückgabe In dieser Syntax sehen Sie Dinge, von denen bis jetzt noch gar nicht die Rede war. Dar- auf müssen wir genauer eingehen. Machen wir dies aber lieber anhand eines Beispiels: Wir programmieren eine Funktion, welche zwei Zahlen zusammenzählt (diese beiden Zahlen werden an die Funktion übergeben) und das Ergebnis an das Hauptprogramm zurückliefert. function Addiere($zahl1,$zahl2) { $ergebnis = $zahl1 + $zahl2; return $ergebnis; } Listing 2.65: In PHP ... function Addiere(zahl1,zahl2) { var ergebnis = zahl1 + zahl2; return ergebnis; } Listing 2.66: ... in JavaScript ... function Addiere(zahl1:Number,zahl2:Number) { var ergebnis:Number = zahl1 + zahl2; return ergebnis; } Listing 2.67: ... und in Flash Lesen wir diese Funktion einmal in Worten: Erzeugt wurde eine Funktion mit dem Namen Addiere. An die Funktion werden zwei Werte übergeben, welche innerhalb der Funktion über die Variablennamen $zahl1 (bzw. zahl1) und $zahl2 (bzw. zahl2) angesprochen werden können. Die Übergabe der Werte erfolgt in runden Klammern direkt hinter dem Funktionsnamen. Innerhalb der Funktion legen wir eine Variable $ergebnis/ergebnis an, der wir das Ergebnis der Addition der Zahlen $zahl1/zahl1 und $zahl2/zahl2 zuweisen. Der Inhalt der Variable wird dann über return an das aufgerufene Programm zurückgegeben.
  54. 54. K A P I T E L 244 Funktionsaufruf Aufgerufen wird eine Funktion über den Namen der Funktion, wie z.B.: Addiere(1,3); //wenn kein Wert zurückgegeben wird $ergebnis = Addiere(1,3) // mit einem Rückgabewert Listing 2.68: In PHP … Addiere(1,3); // wenn kein Wert zurückgegeben wird var ergebnis = Addiere(1,3); mit einem Rückgabewert Listing 2.69: … in JavaScript … Addiere(1,3); // wenn kein Wert zurückgegeben wird var ergebnis:Number = Addiere(1,3); mit einem Rückgabewert Listing 2.70: … und in Flash Hier wird die Funktion Addiere mit den Zahlen 1 und 3 aufgerufen. Der Rückgabe- wert $ergebnis (bzw. ergebnis in JavaScript/Flash) sollte 4 sein. Funktionen ohne Rückgabewert Oft ist es nicht notwendig, einen Wert aus der Funktion zurückzugeben, da die Daten schon innerhalb der Funktion entweder ausgegeben oder anderweitig verwendet wer- den. Sie werden sogar sehr oft auf Funktionen treffen, an die weder Daten übergeben noch Daten von ihr zurückgegeben werden. Sollte jedoch ein Wert von der Funktion an den „Aufrufer“ zurückgegeben werden, wird dieser im Allgemeinen im aufrufenden Programmblock benötigt. Aus diesem Grund werden die Rückgabewerte gerne im aufrufenden Teil als Variablen gespeichert. Eine andere Variante ist das Ausgeben des Variablenwerts per echo (PHP), alert (JavaScript) oder trace (Flash). Hier ein Beispiel für eine Funktion, die keinen Wert zurückliefert, da ein etwaig errech- neter Wert bereits innerhalb der Funktion ausgegeben wird: function Addiere2($zahl1,$zahl2) { $ergebnis = $zahl1 + $zahl2; echo($ergebnis); //Rückgabe ist nicht notwendig, da Ergebnis im Browser angezeigt wird } Addiere2(10,340); Listing 2.71: Der Wert der Variable (350) wird in PHP per echo im Browser ausgegeben. function Addiere2(zahl1,zahl2) { var ergebnis = zahl1 + zahl2;
  55. 55. G R U N D L A G E N D E R P R O G R A M M I E R U N G 45 alert(ergebnis); } Addiere2(10,340); Listing 2.72: JavaScript gibt das Ergebnis in einer Alert-Box aus. function Addiere2(zahl1:Number,zahl2:Number) { var ergebnis:Number = zahl1 + zahl2; trace(ergebnis); } Addiere2(10,340); Listing 2.73: In Flash benutzt man trace für eine Ausgabe im Ausgabefenster. Arrays übergeben Wenn an eine Funktion Variablen übergeben werden, die in der Funktionsdeklaration explizit aufgeführt sind, so können diese Werte eben über diese Variablennamen (hier: $zahl1 / zahl1 und $zahl2 / zahl2) angesprochen werden. Ist von vorneherein nicht eindeutig klar, wie viele Werte man an eine Funktion übergeben möchte, dekla- riert man diese nicht explizit, sondern greift auf die Verwendung eines Arrays zurück. Alles, was wir dazu wissen müssen, ist: 1. Wie erstelle ich ein Array? (nur PHP) 2. Wie erhalte ich die Anzahl der Werte eines Arrays? 3. Wie kann ich diese Werte in einer Schleife auslesen? Ein Beispiel: // Funktion deklarieren function Addiere3($arr){ //Anzahl der Elemente des Arrays $arr in $anzParams speichern $anzParams = count($arr); $ergebnis = 0; for($i=0; $i < $anzParams; $i++){ // Addieren aller Parameter $ergebnis = $ergebnis + $arr[$i]; // $ergebnis += $ergebnis wäre auch richtig } // Ergebnis zurückgeben PHPPHP Lokale Variablen in Funktionen Grundsätzlich sind Variablen, die innerhalb einer Funktion angelegt werden, nicht außerhalb der Funktion bekannt. Aus diesem Grund gibt es return, um Werte außer- halb der Funktion weit- erverwenden zu können.
  56. 56. K A P I T E L 246 return $ergebnis; } //Array der Parameter erzeugen $params = array(1,3,5,2,8); //Aufruf der Funktion Addiere3 und Übergabe des Arrays $params $resultat = Addiere3($params); echo($resultat); Listing 2.74: Auswerten einer beliebigen Anzahl von Übergabeparametern an eine PHP-Funktion Insgesamt wird also in unserer Funktion Addiere3 die for-Schleife fünfmal durch- laufen. Bei jedem Durchlauf wird $ergebnis um den gerade aktuellen Wert aus dem Array $params erhöht. Das Endergebnis ist somit 18. In JavaScript und Flash stellt sich die Sachlage etwas differenzierter dar, denn hier kann man innerhalb einer Funktion auf ein Array namens „arguments“ zurückgreifen, das alle an die Funktion übergebenen Werte beinhaltet – dieses Array muss somit nur noch ausgelesen werden. Der Aufruf der Funktion gleicht dem vorherigen: function Addiere3() { var args = Addiere3.arguments; var ergebnis = 0; for(var i =0; i<args.length; i++) { ergebnis += args[i]; } return ergebnis; } Addiere3(1,3,5,2,8); Listing 2.75: JavaScript erhält eine beliebige Anzahl an Parametern übergeben. function Addiere3() { var args:Array = arguments; var ergebnis:Number = 0; for(var i:Number=0; i<args.length; i++) { ergebnis += args[i]; } return ergebnis; JavaScript und ActionScript JavaScript und ActionScript
  57. 57. G R U N D L A G E N D E R P R O G R A M M I E R U N G 47 } Addiere3(1,3,5,2,8); Listing 2.76: Auswerten einer beliebigen Anzahl von Übergabeparametern an eine Flash-Funktion. Möch- ten Sie das Ergebnis der Addition ausgeben, so ersetzen Sie die letzte Zeile mit trace(Addiere3(1,3, 5,2,8));. Im Gegensatz zu Flash (es wird lediglich auf das Array arguments zugegriffen) erfolgt in JavaScript der Zugriff über: Funktionsname.arguments. 2.9 Cookies Im Internet würde nur sehr wenig ohne Cookies funktionieren. Jeder Webshop und jedes Forum arbeiten im Grunde mit Cookies. Diese ermöglichen es, User bei einem Wiederaufruf einer Website zu erkennen und persönlich zu begrüßen oder, wie es bei einem Webshop üblich ist, ihnen ihren Warenkorb anzuzeigen. Einige User haben leider das Setzen von Cookies deaktiviert. Meist geschieht dies aus Angst, dass fremde Personen Zugriff auf die eigenen Daten bekommen. Diese Angst ist aber unbegründet, da nicht der Server Cookies am User-PC ausliest, sondern der Client, also der Browser des Users, sendet die Cookie-Daten an die URL zurück. Unterscheiden kann man zwischen persistenten Cookies und Session-Cookies. Letzte- re werden wir im nächsten Abschnitt behandeln. 2.9.1 Exkurs HTTP Wahrscheinlich ist Ihnen der Begriff HTTP schon öfter bei der Eingabe eines Links oder einer Webadresse aufgefallen. Doch was ist dieses HTTP eigentlich und wozu dient es? HTTP ist eine Abkürzung für „HyperText Transfer Protocol“ und ist ein Grundstein des Internets. Mittels HTTP wird die Verständigung des Clients mit dem Server erst möglich. Bei dem Aufruf einer Website geschieht immer dasselbe. 1. Request – der Client (Browser) stellt eine Verbindung mit dem Server her und fragt nach der gewünschten Webseite. 2. Response – Antwort des Webservers mit den Daten oder einer Fehlermeldung, falls die gewünschten Daten nicht vorhanden sind 3. Der Client empfängt die Antwort des Servers und stellt die gewünschten Daten dar. 4. Anschließend wird die Verbindung zwischen Client und Browser geschlossen. Definition von Cookies Cookies sind ein Mecha- nismus, um clientseitige Informationen zu speichern und wieder auszulesen. Diesen Mechanismus nutzen serverseitige Verbindungen.
  58. 58. K A P I T E L 248 HTTP und Cookies So weit, so gut, aber wahrscheinlich stellen Sie sich nun die Frage: „Was hat jetzt HTTP mit Cookies zu tun?“ Im Grunde haben sie nichts miteinander zu tun. Wichtig für uns ist einzig die Tatsache, dass eine Verbindung zwischen Client und Server immer nach Übergabe der gewünschten Daten geschlossen wird. Dies ist auch nicht weiter schlimm, solange Sie nicht gewisse Daten zu einem späteren Zeitpunkt auf einer weiteren Seite benötigen. Denken wir zum Beispiel an einen Warenkorb bei einem Online-Shop. User können nach Auswahl eines Artikels nach weiteren Produkten suchen und diese dann dem eigenen Warenkorb hinzufügen. Jedoch müssen wir dazu immer wissen, welcher User gerade in unserem Webshop surft. Ansonsten könnte es ja passieren, dass der gewünschte Artikel im Warenkorb eines falschen Kunden gespeichert wird. Genau hier liegt das Problem von HTTP, da sofort nach Übergabe der gewünschten Daten dieVerbindung zwischen Browser und Client geschlossen wird. Somit wissen wir zu keiner Zeit, dass der User X vorher auf der Seite Y gesurft hat. Um dieses Problem in den Griff zu bekommen, können wir auf Cookies oder Sessions zurückgreifen. Cookies setzen In PHP steht uns nur eine Funktion zur Verfügung, die es ermöglicht, Cookies zu set- zen und diese auch wieder auszulesen: setcookie(); Die setcookie()-Funktion muss unbedingt vor dem ersten Ausgeben von Zeichen im Browser gesetzt werden. Sie erwartet sechs Parameter, wobei alle außer dem ersten optional sind. Die Parameter sind: 1. Name 2. Inhalt 3. Verfallsdatum 4. Pfad 5. Domain 6. secure Optionale Parameter Auch wenn der Name-Parameter als einziger Pflicht ist, müssen Sie die Angaben zu Pfad und Domain durch eine leere Zeichenkette „“ und das Verfallsdatum und secure durch die Ziffer 0 ersetzen. Die Funktion sähe dann wie folgt aus: setcookie (cookie1, "", 0, "", "", 0);
  59. 59. G R U N D L A G E N D E R P R O G R A M M I E R U N G 49 Sehen wir uns die einzelnen Parameter genauer an: Name: Der Name des Cookies darf keine Leerzeichen, Kommas und Semikolons beinhalten. Alles andere ist erlaubt. Inhalt: Der Inhalt des Cookies kann ein Text sein. Meist werden Sie als Inhalt aber eine Variable speichern, deren Inhalt Text ist. Denkbar wäre der Username oder die ID des Users in der Datenbank. Der Inhalt wird auch automatisch über die Funk- tion urlencode() für die URL kodiert. Verfallsdatum: Das Verfallsdatum gibt an, ab wann ein Cookie nicht mehr gültig ist. Geben Sie als Verfallsdatum 0 an, wird das Cookie sofort nach Ende der Sitzung gelöscht. Das Verfallsdatum muss in Sekunden angegeben werden. Angenommen,Ihr Cookie soll nach fünf Minuten verfallen,so müssen Sie folgenden Code für das Verfallsdatum eingeben: time()+300. Mit der Funktion time() bekommt man die aktuelle Uhrzeit. Zu dieser rechnen Sie einfach 300 Sekunden dazu. Um ein bestehendes Cookie früher zu löschen als geplant, geben Sie einfach für das Cookie mit demselben Namen ein Verfallsdatum in der Vergangenheit an. Zum Beispiel time()-300. Domain: Wir haben hier ganz bewusst den Parameter für die Domain vorgezogen, da erst dann der Sinn des Pfad-Parameters erkennbar wird. Ein Browser sucht in der kompletten Liste der Cookies des Users nach einer Übereinstimmung des Domain-Parameters mit dem Internet-Domainnamen des Servers, der die Seite aufgerufen hat. Berücksichtigt werden auch Teile einer Domain. Angenommen, Ihr Domain-Parameter lautet syne.at. Dann ist auch der Aufruf über test.syne.at richtig und das Cookie wird zum Auslesen erkannt. Wenn Sie keine Domain angeben, wird der Name des Servers (hostname) verwendet. Pfad: Mit dem Pfad-Parameter können Sie zur Domain noch einen eigenen Pfad angeben. Erst wenn Domainname und Pfad übereinstimmen, wird das Cookie zum Auslesen bereitgestellt. secure: Mit secure können Sie einstellen, dass ein Cookie nur gesetzt wird, wenn eine sichere Verbindung vorhanden ist. Eine sichere Verbindung erkennt man am https (statt http) in der Adresszeile des Browsers und zusätzlich an einem Schloss-Symbol, dass sich meist in der rechten unteren Ecke befindet. User-ID speichern Nun Schluss mit der Theorie, sehen wir uns ein kleines Beispiel an. Angenommen, wir haben einen Login-Bereich für unsere User erstellt. Um dem User das lästige Anmel- den bei einem erneuten Besuch unserer Website zu ersparen, speichern wir seine User- ID in einem Cookie ab. Durch diese User-ID können wir dann ganz einfach die Daten des Users aus unserer Datenbank laden und den User mit seinem Namen begrüßen. u u u u u u

×