SlideShare una empresa de Scribd logo
1 de 445
Descargar para leer sin conexión
Flash CS3,
AJAX und PHP
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
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
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
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
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
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
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
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
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
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
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.
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
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.
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.
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.
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.
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
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
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
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
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
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
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
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
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
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
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
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
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
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.
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. <, <=, >, >=
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
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
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
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
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
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
}
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
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.
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
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
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; ...)
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 ...
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
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
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
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
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
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
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
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
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.
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;
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.
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
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.
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);
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
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php
Flash cs3, ajax und php

Más contenido relacionado

Destacado

Working with the Bing Maps Silverlight Control
Working with the Bing Maps Silverlight ControlWorking with the Bing Maps Silverlight Control
Working with the Bing Maps Silverlight Controlmark mann
 
Personal toyota mitsui
Personal toyota mitsuiPersonal toyota mitsui
Personal toyota mitsuiedylquispe
 
ramgarh gas thermal plant front page by bhagu bhatia
ramgarh gas thermal plant front page by bhagu bhatiaramgarh gas thermal plant front page by bhagu bhatia
ramgarh gas thermal plant front page by bhagu bhatiaBhagu Bhatia Devikot
 
Intelligente Newsletter-Kampagnen - 3 Erfolgsfaktoren für Ihr E-Mail-Marketing
Intelligente Newsletter-Kampagnen - 3 Erfolgsfaktoren für Ihr E-Mail-Marketing Intelligente Newsletter-Kampagnen - 3 Erfolgsfaktoren für Ihr E-Mail-Marketing
Intelligente Newsletter-Kampagnen - 3 Erfolgsfaktoren für Ihr E-Mail-Marketing eCommerce_Day
 
Роль сертификаций PMI в развитии карьеры руководителя, менеджера, админист…
Роль сертификаций PMI в развитии карьеры руководителя, менеджера, админист…Роль сертификаций PMI в развитии карьеры руководителя, менеджера, админист…
Роль сертификаций PMI в развитии карьеры руководителя, менеджера, админист…Serge Goncharov, PMP, PgMP
 
Blogger Relations – So kooperieren PR-Pros erfolgreich mit Bloggern
Blogger Relations – So kooperieren PR-Pros erfolgreich mit BloggernBlogger Relations – So kooperieren PR-Pros erfolgreich mit Bloggern
Blogger Relations – So kooperieren PR-Pros erfolgreich mit BloggernStart Talking
 
Бизнес тренер активные продажи Иосиф Хусенский
Бизнес тренер активные продажи Иосиф ХусенскийБизнес тренер активные продажи Иосиф Хусенский
Бизнес тренер активные продажи Иосиф ХусенскийХусенский Иосиф
 
12012 harmony
12012 harmony12012 harmony
12012 harmonypetrval
 
11 rád ako lepšie predávať. Zariadim.sk
11 rád ako lepšie predávať. Zariadim.sk11 rád ako lepšie predávať. Zariadim.sk
11 rád ako lepšie predávať. Zariadim.skzariadim
 
MERCOR-TECRESA PRESENCE IN ALGERIA
MERCOR-TECRESA PRESENCE IN ALGERIAMERCOR-TECRESA PRESENCE IN ALGERIA
MERCOR-TECRESA PRESENCE IN ALGERIAJose Manuel Marcos
 
Färgmanual Söders Tryck
Färgmanual Söders TryckFärgmanual Söders Tryck
Färgmanual Söders Tryckmellins
 
5 email facts you didn't know about by @Frontapp
5 email facts you didn't know about by @Frontapp5 email facts you didn't know about by @Frontapp
5 email facts you didn't know about by @FrontappFront
 

Destacado (19)

Working with the Bing Maps Silverlight Control
Working with the Bing Maps Silverlight ControlWorking with the Bing Maps Silverlight Control
Working with the Bing Maps Silverlight Control
 
Spl alahbd
Spl alahbdSpl alahbd
Spl alahbd
 
Fotografia interiores de restaurantes
Fotografia interiores de restaurantesFotografia interiores de restaurantes
Fotografia interiores de restaurantes
 
Arnold oer 120615
Arnold oer 120615Arnold oer 120615
Arnold oer 120615
 
Personal toyota mitsui
Personal toyota mitsuiPersonal toyota mitsui
Personal toyota mitsui
 
ramgarh gas thermal plant front page by bhagu bhatia
ramgarh gas thermal plant front page by bhagu bhatiaramgarh gas thermal plant front page by bhagu bhatia
ramgarh gas thermal plant front page by bhagu bhatia
 
Web 2.0 & Bildung
Web 2.0 & BildungWeb 2.0 & Bildung
Web 2.0 & Bildung
 
Dr Dabbagh, CV, 1394.4.2 b
Dr Dabbagh, CV, 1394.4.2  bDr Dabbagh, CV, 1394.4.2  b
Dr Dabbagh, CV, 1394.4.2 b
 
Intelligente Newsletter-Kampagnen - 3 Erfolgsfaktoren für Ihr E-Mail-Marketing
Intelligente Newsletter-Kampagnen - 3 Erfolgsfaktoren für Ihr E-Mail-Marketing Intelligente Newsletter-Kampagnen - 3 Erfolgsfaktoren für Ihr E-Mail-Marketing
Intelligente Newsletter-Kampagnen - 3 Erfolgsfaktoren für Ihr E-Mail-Marketing
 
Роль сертификаций PMI в развитии карьеры руководителя, менеджера, админист…
Роль сертификаций PMI в развитии карьеры руководителя, менеджера, админист…Роль сертификаций PMI в развитии карьеры руководителя, менеджера, админист…
Роль сертификаций PMI в развитии карьеры руководителя, менеджера, админист…
 
Blogger Relations – So kooperieren PR-Pros erfolgreich mit Bloggern
Blogger Relations – So kooperieren PR-Pros erfolgreich mit BloggernBlogger Relations – So kooperieren PR-Pros erfolgreich mit Bloggern
Blogger Relations – So kooperieren PR-Pros erfolgreich mit Bloggern
 
Бизнес тренер активные продажи Иосиф Хусенский
Бизнес тренер активные продажи Иосиф ХусенскийБизнес тренер активные продажи Иосиф Хусенский
Бизнес тренер активные продажи Иосиф Хусенский
 
Rns 510 install
Rns 510 installRns 510 install
Rns 510 install
 
12012 harmony
12012 harmony12012 harmony
12012 harmony
 
11 rád ako lepšie predávať. Zariadim.sk
11 rád ako lepšie predávať. Zariadim.sk11 rád ako lepšie predávať. Zariadim.sk
11 rád ako lepšie predávať. Zariadim.sk
 
Le journal de Bussy n°161
Le journal de Bussy n°161Le journal de Bussy n°161
Le journal de Bussy n°161
 
MERCOR-TECRESA PRESENCE IN ALGERIA
MERCOR-TECRESA PRESENCE IN ALGERIAMERCOR-TECRESA PRESENCE IN ALGERIA
MERCOR-TECRESA PRESENCE IN ALGERIA
 
Färgmanual Söders Tryck
Färgmanual Söders TryckFärgmanual Söders Tryck
Färgmanual Söders Tryck
 
5 email facts you didn't know about by @Frontapp
5 email facts you didn't know about by @Frontapp5 email facts you didn't know about by @Frontapp
5 email facts you didn't know about by @Frontapp
 

Similar a Flash cs3, ajax und php

Einführung XHTML CSS JS // IT 07-10
Einführung XHTML CSS JS // IT 07-10Einführung XHTML CSS JS // IT 07-10
Einführung XHTML CSS JS // IT 07-10Noël Bossart
 
Echte Lösungen, keine Tricks
Echte Lösungen, keine TricksEchte Lösungen, keine Tricks
Echte Lösungen, keine TricksJens Grochtdreis
 
JavaScript und Security - JavaScript Days 2013 Berlin
JavaScript und Security - JavaScript Days 2013 BerlinJavaScript und Security - JavaScript Days 2013 Berlin
JavaScript und Security - JavaScript Days 2013 BerlinJohann-Peter Hartmann
 
Ajax hands on - Refactoring Google Suggest
Ajax hands on - Refactoring Google SuggestAjax hands on - Refactoring Google Suggest
Ajax hands on - Refactoring Google SuggestBastian Feder
 
C/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino DevelopersC/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino DevelopersUlrich Krause
 
Professionelle Websites
Professionelle WebsitesProfessionelle Websites
Professionelle WebsitesLars Heinemann
 
Fachreferat: Visual Studio 2012, Windows 8 und .NET 4.5
Fachreferat: Visual Studio 2012, Windows 8 und .NET 4.5Fachreferat: Visual Studio 2012, Windows 8 und .NET 4.5
Fachreferat: Visual Studio 2012, Windows 8 und .NET 4.5Digicomp Academy AG
 
HTML5 im Überblick - semantisches HTML, Geolocation, Offline-Webanwendungen, ...
HTML5 im Überblick - semantisches HTML, Geolocation, Offline-Webanwendungen, ...HTML5 im Überblick - semantisches HTML, Geolocation, Offline-Webanwendungen, ...
HTML5 im Überblick - semantisches HTML, Geolocation, Offline-Webanwendungen, ...Karionis
 
FMK2012: Datenaustausch zwischen FileMaker und MySQL von Nico Busch
FMK2012: Datenaustausch zwischen FileMaker und MySQL von Nico BuschFMK2012: Datenaustausch zwischen FileMaker und MySQL von Nico Busch
FMK2012: Datenaustausch zwischen FileMaker und MySQL von Nico BuschVerein FM Konferenz
 
JavaScript Days 2015: Security
JavaScript Days 2015: SecurityJavaScript Days 2015: Security
JavaScript Days 2015: SecurityMayflower GmbH
 
Die Zukunft der Webstandards - Webinale 31.05.2010
Die Zukunft der Webstandards - Webinale 31.05.2010Die Zukunft der Webstandards - Webinale 31.05.2010
Die Zukunft der Webstandards - Webinale 31.05.2010Patrick Lauke
 
FMK 2013 Xojo, Christian Schmitz
FMK 2013 Xojo, Christian SchmitzFMK 2013 Xojo, Christian Schmitz
FMK 2013 Xojo, Christian SchmitzVerein FM Konferenz
 
20120207 prs ib_js_libraries_v02
20120207 prs ib_js_libraries_v0220120207 prs ib_js_libraries_v02
20120207 prs ib_js_libraries_v02Chris Palatinus
 
HTML5 - presentation at W3C-Tag 2009
HTML5 - presentation at W3C-Tag 2009HTML5 - presentation at W3C-Tag 2009
HTML5 - presentation at W3C-Tag 2009Felix Sasaki
 
100% ECM für SharePoint mit ecspand
100% ECM für SharePoint mit ecspand100% ECM für SharePoint mit ecspand
100% ECM für SharePoint mit ecspandChristian Kiesewetter
 
Top 10 Internet Trends 2006
Top 10 Internet Trends 2006Top 10 Internet Trends 2006
Top 10 Internet Trends 2006Jürg Stuker
 
Web 2.0 in und für Bibliotheken
Web 2.0 in und für BibliothekenWeb 2.0 in und für Bibliotheken
Web 2.0 in und für BibliothekenChristian Hauschke
 

Similar a Flash cs3, ajax und php (20)

Einführung XHTML CSS JS // IT 07-10
Einführung XHTML CSS JS // IT 07-10Einführung XHTML CSS JS // IT 07-10
Einführung XHTML CSS JS // IT 07-10
 
Echte Lösungen, keine Tricks
Echte Lösungen, keine TricksEchte Lösungen, keine Tricks
Echte Lösungen, keine Tricks
 
JavaScript und Security - JavaScript Days 2013 Berlin
JavaScript und Security - JavaScript Days 2013 BerlinJavaScript und Security - JavaScript Days 2013 Berlin
JavaScript und Security - JavaScript Days 2013 Berlin
 
Ajax hands on - Refactoring Google Suggest
Ajax hands on - Refactoring Google SuggestAjax hands on - Refactoring Google Suggest
Ajax hands on - Refactoring Google Suggest
 
C/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino DevelopersC/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino Developers
 
Professionelle Websites
Professionelle WebsitesProfessionelle Websites
Professionelle Websites
 
Fachreferat: Visual Studio 2012, Windows 8 und .NET 4.5
Fachreferat: Visual Studio 2012, Windows 8 und .NET 4.5Fachreferat: Visual Studio 2012, Windows 8 und .NET 4.5
Fachreferat: Visual Studio 2012, Windows 8 und .NET 4.5
 
Ec2009 Templates
Ec2009 TemplatesEc2009 Templates
Ec2009 Templates
 
HTML5 im Überblick - semantisches HTML, Geolocation, Offline-Webanwendungen, ...
HTML5 im Überblick - semantisches HTML, Geolocation, Offline-Webanwendungen, ...HTML5 im Überblick - semantisches HTML, Geolocation, Offline-Webanwendungen, ...
HTML5 im Überblick - semantisches HTML, Geolocation, Offline-Webanwendungen, ...
 
FMK2012: Datenaustausch zwischen FileMaker und MySQL von Nico Busch
FMK2012: Datenaustausch zwischen FileMaker und MySQL von Nico BuschFMK2012: Datenaustausch zwischen FileMaker und MySQL von Nico Busch
FMK2012: Datenaustausch zwischen FileMaker und MySQL von Nico Busch
 
JavaScript Days 2015: Security
JavaScript Days 2015: SecurityJavaScript Days 2015: Security
JavaScript Days 2015: Security
 
C++ kompakt
C++ kompaktC++ kompakt
C++ kompakt
 
1 - Einfuehrung
1 - Einfuehrung1 - Einfuehrung
1 - Einfuehrung
 
Die Zukunft der Webstandards - Webinale 31.05.2010
Die Zukunft der Webstandards - Webinale 31.05.2010Die Zukunft der Webstandards - Webinale 31.05.2010
Die Zukunft der Webstandards - Webinale 31.05.2010
 
FMK 2013 Xojo, Christian Schmitz
FMK 2013 Xojo, Christian SchmitzFMK 2013 Xojo, Christian Schmitz
FMK 2013 Xojo, Christian Schmitz
 
20120207 prs ib_js_libraries_v02
20120207 prs ib_js_libraries_v0220120207 prs ib_js_libraries_v02
20120207 prs ib_js_libraries_v02
 
HTML5 - presentation at W3C-Tag 2009
HTML5 - presentation at W3C-Tag 2009HTML5 - presentation at W3C-Tag 2009
HTML5 - presentation at W3C-Tag 2009
 
100% ECM für SharePoint mit ecspand
100% ECM für SharePoint mit ecspand100% ECM für SharePoint mit ecspand
100% ECM für SharePoint mit ecspand
 
Top 10 Internet Trends 2006
Top 10 Internet Trends 2006Top 10 Internet Trends 2006
Top 10 Internet Trends 2006
 
Web 2.0 in und für Bibliotheken
Web 2.0 in und für BibliothekenWeb 2.0 in und für Bibliotheken
Web 2.0 in und für Bibliotheken
 

Flash cs3, ajax und php

  • 1.
  • 3.
  • 4. 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
  • 5. 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
  • 6. 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
  • 7. 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
  • 8. 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
  • 9. 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
  • 10. 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
  • 11. 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
  • 12. 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
  • 13. 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
  • 14. 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.
  • 15. 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
  • 16. 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.
  • 17.
  • 18. 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.
  • 19. 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.
  • 20. 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.
  • 21. 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
  • 22. 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
  • 23. 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
  • 24. 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
  • 25. 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
  • 26. 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
  • 27. 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
  • 28. 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
  • 29. 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
  • 30. 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
  • 31. 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
  • 32. 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
  • 33. 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
  • 34. 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.
  • 35. 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. <, <=, >, >=
  • 36. 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
  • 37. 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
  • 38. 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
  • 39. 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
  • 40. 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
  • 41. 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 }
  • 42. 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
  • 43. 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.
  • 44. 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
  • 45. 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
  • 46. 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; ...)
  • 47. 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 ...
  • 48. 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
  • 49. 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
  • 50. 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
  • 51. 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
  • 52. 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
  • 53. 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
  • 54. 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
  • 55. 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
  • 56. 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.
  • 57. 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;
  • 58. 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.
  • 59. 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
  • 60. 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.
  • 61. 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);
  • 62. 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