PHP Was kann PHP? 1. Serverside Scripting: Generierung dynamischer Web-Inhalte für die Gnerierung von HTML2. 3. Seiten benötigt man einen PHP_Interpreter und einen webserver, der die Dokumente verschickt; Generierung von XML-Dokumenten, Grafiken, Flash-Animationen, PDF-Dateien Command-Line Scripting: PHP kann Skripte von der Kommandozeile aus starten -> wie Perl, AWK, Unik_Shell; Anwendungsgebiete: Systemadministration, Back-up-Skripte, Log-Parsing Client-side GUI Applications: mit PHP-GTK (gtk.php.net) kann man vollständige Plattformunabhängige GUI-anwendungen in PHP schreiben PHP ist plattformunabhängig, verschiedene Unix-Derivate, Linux, FreeBSD, Solaris, Windows, MAC OS X PHP läuft mit allen gängigen Web-Servern zusammen, wie Apache, MS IIS, Natscape iPlanet LAMP-Architecture (Linux, Apache, MySQL, PHP) PHP • • • unterstützt Datenbanken, wie MySQL, PostgreSQL, Oracle, Sybase, ODBC-kompatibel unterstützt das dynamische Web-Seitenestellen aus Datenbankinhalten liefert eine Bibliothek von PHP-Code für Standardprobleme -> PHP Extension and Application Repository (PEAR) – Framework und ein verteiltes System für Wiederverwendbare PHP-Komponenten (http://pear.php.net) Geschichte von PHP 1994 8.6.95 16.4.96 entwikelt von Rasmus Lerdorf Vorstellung Version 1.0 -> GNU public license Version 2.0: DB Unterstützung (mSQL), Funktionen, Arrays, Variablen, Schleifen, Skriptsprache 6.6.98 Version 3.0: Unterstützung weiterer DB, mehrere Entwickler, Unterstützung von SNMP, IMAP, C-API, neue stabile und laistungsfähigere Parsing-Engine 22.5.2000 Version 4.0: Architektur überarbeitet, neuer Parser PHP 5 ist im Gespräch, Verbesserung des PHP Objektsystems Wachstum von PHP Quelle Netcraft (www.netcraft.com) Rückgang Ende 2001: sterbende .coms, Anzahl der Server, die Netcraft gefunden hat waren ebenfalls rückläufig November 2001: Netcraft findet 36,5 Mio Domains, 7,1 Mio davon haben PHP installiert (etwas weniger als 20%). Svenja Wendler - PHP Grundlagen www.wendler-im-netz.de 1 Sprachgrundlage von PHP Name von benutzerdefinierten Klassen und Funktionen, sowie Standardkonstruktoren und Schlüsselwörtern, wie z. B. echo, while,… sind case-insensitiv echo („Hallo“) = ECHO („Hallo“) = Echo („Hallo“) Namen von Variablen sind case-sensitive $name != $Name != $NAME PHP benutzt Semikolons, um einfache Befehle voneinander zu trennen Zusammengesetzte Befehle werden durch { } umschlossen, kein ; nach der schließenden Klammer nötig Semikolon vor der schließenden Klammer muss dort stehen if ($needed) { echo („we must have it“); } //Semikolon muss stehen Semikolon vor einem schließenden PHP-Tag ist optional (wird aber empfohlen) <?php echo („Blabla“); ?> //Semikolon nicht notwendig Leerzeichen und Zeilenumbrüche werden ignoriert Kommentare # Kommentar = Shell-Style (alles von # bis zum Zeilenende ist Kommentar, PHP-Tag beendet Kommentar // Kommentar = C++ Style */ …. */ = C-Style von */ bis */ ist Kommentar, PHP-Tag beendet Kommentar nicht. <?php $d=4 //set $d to 4 ?> Then another <?php echo $d ?> Ausgabe: Then another 4 Literal: Datenwert, der direkt im Programm auftaucht z. B. 2001, 0xEE, „Hallo“, ‚hi’, true, false, null Identifier: Namen für Variablen, Funktionen, Konstanten und Klassen (erstes Zeichen ASCIIBuchstabe, Unterstrich(_) oder alles zwischen ASCII 0x7F und ASCII 0xFF; danach sind diese Zeichen und 0 – 9 gültig z. B. $bill, $ not valid, $head-count , $I, $3wa, $_underscore Funktionsnamen sind case-insensitive Klassenamen, nicht case sensitive, der Name std_Class ist reserviert Konstanten gibt es nur für die Datentypen, boolean, double und String (haben den Wert, der mit der define()-Funktion gesetzt wurde) define(‚PUBLISHER’, „O`Reilly & Associates“); echo PUBLISHER; Keywords sind in PHP nicht case sensitive Man darf Variablen, Funktionen, Klassen und Konstanen nicht Namen von Schlüsselworten geben - > selbiges gilt für die eingebauten PHP-Funktionen Svenja Wendler - PHP Grundlagen www.wendler-im-netz.de 2 DATENTYPEN Es gibt 1. 2. 3. 4. 5. 6. 7. 8. 8 unterschiedliche Datentypen Integer Float Strings Boolean Arrays Objects Resources Null INTEGER Schreibweise dezimal (-17) , oktal (0755) oder hexadezimal (0x12B) Ist der Wert zu groß für den Integerzahlenbereich, wird automatisch in eine Gleitkommazahl umgewandelt Mit is_int() oder is_integer() prüft man ob Variable einen Integer-Wert enthält GLEITKOMMAZAHLEN normale Darstellung (-3.14) oder wissenschaftliche Notation (17.03E-5) Achtung: Rundungsfehler !-> s. h. Java is_float() oder is_real() STRINGS wichtig bei Webapplicationen umfangreiche Funktionen zum Zeichenketten zu manipulieren 2 Schreibweisen ‚big dog’; oder „big dog“ Variablen in Zeichenketten werden immer in „“ ersetzt $name = „Guido“; echo „Hi $name \n“; echo ‘Hi $name’; Ausgabe: Hi Guido Hi $name Testen auf Gleicheit: if ($a == $b) {} is_string() BOOLEAN folgende Werte sind false (das Schlüsselwort false, integer 0, double 0.0, leere Zeichenkette „“ oder String „0“, ein Array mit 0 Elementen, ein Objekt ohne Datenfelder und Methoden, der Wert null) alle anderen Werte sind true is_bool() ARRAY mehrere Zugriffsverfahren sind implementiert Zahlen -> 0…n $person [0] =„Bob“ $person[1]=“Jane“ $person[2]=“paul“ Namen $creator[‘lightbulb’] = “Edison” $creator[‘rotary engine’]=” Wankel”» $creator[‘toilet’]=”Crapper” $person = array (‘Bob’, ‘Jane’, ‘Paul’) $creator = array(‘Light bulb’ => ‘Edison’; ‘Rotary engine’ => ‘Wankel’; ‘Toilet’ => ‘Crapper’;) Test mit is_array() Svenja Wendler - PHP Grundlagen www.wendler-im-netz.de 3 OBJEKTE PHP unterstützt die objektorientierte Programmierung Klasse ist definiert durch Datenfelder und Methoden (functions) class Person { var $name = ‚’; function name ($newname = NULL) { if (!is null ($newname)) { $this -> name = $newname; } return this -> name; } } Erzeugen neuer Objekte über new $tc = new Person; Zugriff auf Datenfelder und Methoden des Objektes über -> $tc -> name (‚Crapper’); Test mit is_object() if (is_object($x) { //$x is object } RESOURCES Viele Module liefern viele Funktionen, um mit der Umgebung zu kommunizieren z. B. DB – eine Funktion für den connect, Query, close… häufig hat man mehrere Verbindungen gleichzeitig geöffnet -> die Connect-Funktion liefert somit etwas um die Verbindungen zu unterscheiden -> eine Resource Resourcen weden per Garbage Collection wieder automatisch freigeben, wenn sie nicht mehr verwendet werden. $res = database.connect (); /fictiveFunktion database_query($res); $res = „boo“; //DB-Verbindung wird automatisch geschlossen Test mit is_resource()-Funktion NULL Variablen, die keinen Wert haben sind Null Test mit is_null() Svenja Wendler - PHP Grundlagen www.wendler-im-netz.de 4 VARIABLEN ---Variablen sind Identifier mit einem $-Zeichen davor Variablen können prinzipiell werte von jedem Typ enthalten es gibt keine Compiler – oder Laufzeit-Typüberprüfung $Wort = „Fred“; $Wort=35; $Wort=array(„Fred“, 35, ‚Wilma’); man kann in PHP keine Variablen deklarieren - bei der ersten Verwendung wird eine Variable erzeugt - d. h. das Setzen der Variablen ist eine Deklaration mann kann auf eine Variable zugreifen, deren Name in einer anderen Variable gespeichert ist. $foo = ‚bar’; $$foo = ‚baz’; die Variable $bar hat nun den Wert ‘baz’ VARIABLEN – REFERENZEN Um ein Alias für $black für die Variablen $white zu erstellen $black = $white löscht man eine der beiden Variablen z. B. mit der Funktion unset $white so beeinflusst dies die andere Variable nicht Funktionen können Werte per Referenz zurückgeben, um z. B das Kopieren großer Felder zu vermeiden function $ref_ref() { $var = “PHP” return $var; } $v = &ref_ref(); // beachte das & GÜLTIGKEITSBEREICH FÜR VARIABLEN es gibt 1. 2. 3. 4. 4 unterschiedliche Gültigkeitsbereiche local global static Funktionsparameter local wird eine Variable in einer Funktion deklariert, so ist sie lokal definiert sie ist nur innerhalb dieser Funktion sichtbar / und in weiter verschachtelten Funktionen innerhalb dieser Funktion sichtbar function update_counter() { $counter++; } $counter=10; update_counter(); echo $counter; Ausgabe: 10 die lokale Variable innerhalb der Funktion wird nach Beendigung der Funktion gelöscht es gibt in PHP nur lokale Variablen in Funktionen (Konzept funktioniert nicht für andere Blöcke, z. B. Schleifen) global Varialben, die außerhalb einer Funktion deklariert werden sind global man kann auf sie von überall im Programm zugreifen standardmäßig aber nicht in Funktionen Svenja Wendler - PHP Grundlagen www.wendler-im-netz.de 5 will man auf globale Variablen innerhalb von Funktionen zugreifen, so muss man das Schlüsselwort glabal vor die Variablendeklaration innerhalb der Funktion stellen function update_counter() { global $counter; $counter++; } $counter=10; update_counter(); echo $counter; Ausgabe: 11 alternativ kann man auch auf das $GLOBALS-Array von PHP zugreifen function update_counter() { $GLOBALS[counter]++; } $counter=10; update_counter(); echo $couner; Ausgabe 11; static eine static-Variable behält ihren Wert zwischen zwei Funktionsaufrufen ist aber nur sichtbar innerhalb der Funktionen function update_counter () { static $counter=0; $counter++; echo “static counter ist no $counter \n”); } $counter =10; update_counter(); update_counter(); echo “Globaler counter ist $counter \n”; Ausgabe: static counter is now 1 static counter ist now 2 Globaler counter ist 10 Funktionsparameter eine Funktion kann Parameter besitzen Funktionsparameter sind local -> nur innerhalb der Funktion zugreifbar function greet ( $name) { echo „Hello $name \n „; } greet (“Janet”); Ausgabe: Hello Janet GARBAGE COLLECTION PHP unterstützt 2 Mechanismen, um Speicher zu verwalten 1. Reference Counting (Speicherfreigabe) 2. Copy on write (Speicherplatz sparen beim Kopieren von Variablen) Copy-on-Write Speicherplatz wird noch nicht kopiert, wenn die Variablen zugewiesen werden Dies geschieht erst wenn die Kopie oder das Original geändert wird $worker = array („Fred“, 35 „Wilma“); $other = $worker; //array ist noch nicht kopiert worden Svenja Wendler - PHP Grundlagen www.wendler-im-netz.de 6 $worker [1] = 36; //arary worker verändert, Kopie ist erzeugt worden Reference Counting PHP speichert zu jedem Stück Speicher die Anzahl von Wegen, über die man auf diesen Speicherplatz zugreifen kann $worker = array („Fred“, 35 „Wilma“); // worker:1 $other = $worker; //array ist noch nicht kopiert worden // worker: 2 , other: 2 $worker [1] = 36; //arary worker verändert, Kopie ist erzeugt worden // worker:1 , other:1^ erreicht der Reference Counter den Wert 0, so wird der Speicher wieder freigegeben is set ($name) schaut ob eine Varialbe einen Wert bekommen hat unset ($name) löscht den Wert der Variable AUSDRÜCKE UND OPERATOREN wie in C oder Präzedenz 19 18 17 16 16 16 15 15 15 14 14 13 13 12 12 12 12 11 10 9 8 7 6 5 4 3 2 1 Die Pearl (oder Java) kann man komplexe Ausdrücke aus einfacheren zusammensetzen Assoziationsrichtung Operator Operation N new Neue Objekte erzeugen R [ Array erzeugen R ! Logisches NOT R ~ Bitweises Not R ++ Hochzählen R -Runtezählen R (int), (double), (string), (array), Cast-Operatoren (object) R @ Fehlermeldungen unterdrücken L * Multiplikation L / Division L % Modulo L + Addition L Subtraktion L . String Konkatenation L << Bitweises shift links L >> Bitweises shift rechts N <, <= Kleiner als, Kleinergleich N >, >= Größer als, Größer gleich N == Wertgleichheit N != , <> Ungleichheit N === Wert und Typ-gleichheit N !== Wert und TypUngleichheit L & Bitweises UND L ^ Bitweises XOR L | Bitweises ODER L && Logisches UND L || Logisches ODER L ?: Conditional-Operator L = Zuweisung L +=, -=,*=, .=, /=, &=,|=, ^=, Zuweisung und Operation ~=, <<=, >>= L and Logisches UND L xor Logisches XOR L or Logisches Oder L , Listen-Trennzeichen meisten Operatoren, werden genauso wie in Java oder C verwendet. Svenja Wendler - PHP Grundlagen www.wendler-im-netz.de 7 Besondere Operatoren: Implicit Casting: Operatoren erwarten bestimmte Typen der Operanden; PHP konvertiert die Typen automatisch bei Unstimmigkeiten (Typ Juggling) Operand 1 Integer Integer Operand 2 Float String Float String Konvertierugn Integer zu float String zu Zahl, wenn Zahl ein Float, dann Integer zu Float String zu Float Konkatenationsoperator 3.2.74 wird zu 32,74 umgewandelt In PHP kann man überall einen String einsetzen, wo eine Zahl erwartet wird Man geht davon aus, dass der STring mit einer Integer oder float Zahl beginnt Wird keine Zahl am Anfang des String erkannt ist der Wert des Strings 0 Enthält der String einen Punkt oder ein kleines oder großes e (eingeschlossen von Zahlen) wird er zu float. „9 lives“ – 1 = 8 (int) „3.14Pies“ * 2 = 6.28 (float) „9 lives.“ – 1 = 8.0 (float) “1E3PointofLight” +1 =1001 (float) VERGLEICHSOPERATOREN Operanden von Vergleichsoperatoren können beide numerisch, beide String oder einer numerisch und der andere String sein (numerischer oder lexikalischer Vergleich) Operand 1 Zahl String (vollst. numerisch) String (vollst. numerisch) String (nicht vollst. numerisch) String (vollst. numerisch) String (nicht vollst. numerisch) Operand 2 Zahl String (vollst. numerisch) Zahl Zahl String (nicht vollst. numerisch) String (nicht vollst numerisch) Vergleichsart numerisch numerisch numerisch lexikalisch lexikalisch lexikalisch Synonym (integer) (real) veränderter Typ Integer Gleitkommazahl Zeichenkette Boolean Feld Objekt CASTING OPERATOREN Operator (int) (float) (String) (bool) (array) (object) (boolean) class Person { var $name = ‚Fred’; var $age = 35; } $O = new Person; $a = (array)$O; print_r ($a); Ausgabe: Array ([name] => “Fred” [age] => 35 ) Oder anders herum $a = array (‘name’ => “Fred”; ‘age’ => 35, ‘wife’ => “Wilma”); $O = (object) $a; echo $O -> name Ausgabe: Fred Svenja Wendler - PHP Grundlagen www.wendler-im-netz.de 8 FEHLERUNTERDRÜCKUNG (@) Manche Funktionen oder Operatoren können Fehlermeldungen ausgeben. Mit @ wird die Ausgabe der Fehlermeldung unterdrückt. AUSFÜHRUNGSOPERATOR (` ` ) - > `Backtick` Operator führt die Zeichenkette zwischen den Backticks als Shellkommando aus und gibt die ausgabe des Shellkomandos zurück! BEDINGUNGSOPERATOR (? : ) Der einzige ternäre Operator. Der Bedingungsoperator wertet den Ausdruck vor dem ? aus. Ist der Ausdruck TRUE, so wird der Ausdruck zwischen ? und : ausgeführt. Sonst wird der Wert des Ausdrucks nach dem : zurückgegeben. (Statt if, then else – Konstruktion) $a == 0 ? echo „wert 0“ : echo „unglück 0“ <a href = „<? = $url ?>“ > <? = $linktext ? $linktext : $url ?> </a> FLUSSKONTROLLANWEISUNGEN IF if (Bedingung) Anweisung if (Bedingung) { Anweisungen } else if (Bedingung 2 ) {Anweisungen } else {Anweisungen} SWITCH Ähnlich wie Java, jedoch auch mit Strings möglich switch ($name) { case ‚sylvie’ : … break; case ‚bruno’ : … break; default : print (“No”); } WHILE while (Ausdruck) Anweisungen DO WHILE do Anweisungen while (bedingung) FOR for (start; bedingung, veränderung) Anweisungen Endlosschleife möglich for (;;) { … } FOR EACH Iteriert über die Elemente eines Arrays for each $array as $current { Anweisungen } EXIT exit () alias die () wird exit() im Skript erreicht, so wird diese sofort beendet Svenja Wendler - PHP Grundlagen www.wendler-im-netz.de 9 DAS EINBETTEN VON PHP IN WEBSEITEN XML-Stil <?php … ?> SGML – Stil <? echo „hello world“; ?> Skript-Stil (am saubersten) <script language = “php”> echo “Hello World”; </script> Svenja Wendler - PHP Grundlagen www.wendler-im-netz.de 10
© Copyright 2024 ExpyDoc