Was kann PHP? LAMP-Architecture (Linux, Apache, MySQL, PHP

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