PHP Grundlagen
Beispiel: Hello-World in PHP
<?php
header("Content-type: text/html");
?>
<!DOCTYPE html>
<html>
<head>
<title>Hello World</title>
</head>
<body>
<?php
echo "<p>Hello World</p>";
?>
</body>
</html>
PHP und HTML mischen
PHP-Datei wird vom PHP-Interpreter ausgeführt
- ist keine HTML-Datei für den Browser
- wird vom Web-Server an den PHP-Interpreter übergeben
- Ausgabe des Interpreters ist normalerweise eine HTML-Seite
- Text außerhalb von
<?php ... ?>wird in die Ausgabe kopiert - auch Leerzeichen und Zeilenumbrüche werden in die Ausgabe kopiert
In echten Projekten verwendet man häufig zusätzlich eine Template-Sprache, z. B. Twig
Beispiel: Hello-World in PHP
<?php
header("Content-type: text/html");
echo "<!DOCTYPE html>";
echo "<html>";
echo "<head>";
echo "<title>Hello World</title>";
echo "</head>";
echo "<body>";
echo "<p>Hello World</p>";
echo "</body>";
echo "</html>";
?>
Beispiel: Hello-World in PHP (heredoc)
<?php
header("Content-type: text/html");
$hello = "Hello World";
echo <<<EOD
<!DOCTYPE html>
<html>
<head>
<title>Hello World</title>
</head>
<body>
<p>$hello</p>
</body>
</html>
EOD;
?>
PHP-Eigenschaften
- Syntax, Operatoren und Kontrollstrukturen ähnlich zu Java
- dynamisch typisiert ähnlich JavaScript
- keine (sichtbaren) Typen
- keine Variablendeklaration nötig
- Funktionsdeklaration mit
function - Typen können für robustere Programme angegeben werden
- Variablennamen beginnen immer mit
$ - Konstanten können definiert (ohne
$)const GREETING = "Hallo"; - umfangreiche Bibliotheken
- Datenbankzugriffe, Mathematik, Stringverarbeitung
- Mail, HTML, …
Datentypen
- PHP typisiert Variablen dynamisch
- Intern werden jedoch Datentypen verwendet
- Boolean:
boolmit den beiden Konstantentrueundfalse - Ganzzahl:
int,integer,long - Fließkommazahl:
float,real,double - Zeichenkette:
string - Arrays:
array(indiziert oder assoziativ) - Objekt-Datentyp
Typumwandlung
- Typumwandlung (Type Juggling) erfolgt oft implizit und großzügig
- hin zum größeren Typ
- auch von Strings zu Zahlen
- Zwei Vergleichsoperatoren
==Vergleich mit Typumwandlung===Vergleich ohne Typumwandlung- Explizite Umwandlung mit Cast-Operator
(TYP)oder...val-Funktionen
| Cast | Umwandlungsfunktion | Beschreibung |
|---|---|---|
(int) | intval($var) | Umwandlung zu int |
(bool) | boolval($var) | Umwandlung zu bool |
(float) | floatval($var) | Umwandlung zu float |
(string) | strval($var) | Umwandlung zu string |
echo (int) "12.33"; // -> 12
echo intval("12.33"); // -> 12
echo (int) "aaaa"; // -> 0
echo (float) "12.33"; // -> 12.33
echo (float) "aaa"; // -> 0.0
echo (string) 12; // -> "12"
echo (string) 12.33; // -> "12.33"
Truthiness
PHPs Regeln zur Truthiness sind ähnlich wirr, wie die von JavaScript
| Wert | Wahrheitswert | Wert | Wahrheitswert | |
|---|---|---|---|---|
"" | false | -1 | true | |
null | false | "1" | true | |
| undefined | false | "0" | false | |
[] | false | "-1" | true | |
['a', 'b'] | true | "php" | true | |
1 | true | "true" | true | |
42 | true | "false" | true | |
0 | false |
Datentyp prüfen
Man kann den Typ einer Variablen prüfen
is_bool($var): Booleanis_integer($var): Ganzzahlis_real($var): Fließkommais_numeric($var): Ganzzahl oder Fließkommais_string($var): Stringis_array($var): Arrayis_object($var): Objektgettype($var): Liefert den Typ als String
Existenz von Variablen
Zugriff auf nicht initialisierte Variablen ist verboten ⇒ Fehler
- Mit
issetkann man Variable prüfen, es liefert true, wenn diese Variable einen Wert hatfalse, falls die Variable nicht gesetzt wurde- Mit
unsetkann man eine Variable löschen - PHP löscht Variablen automatisch am Ende der Sichtbarkeit
- Reference-Counting, kein Garbage Collector
echo isset($a); // -> false ()
$a = "Hallo";
echo isset($a); // -> true (1)
unset($a);
echo isset($a); // -> false ()
Kurzform mit ??-Operator
??-Operator erleichtert den Umgang mit Variablen
- Syntax:
$var ?? expr - Wenn
$vardefiniert und nichtnullist, wird$varzurückgegeben - Andernfalls wird
exprausgewertet und zurückgegeben
$a = null;
$b = "valid";
echo $a ?? "default"; // -> default
echo $b ?? "default"; // -> valid
echo $c ?? "default"; // -> default
echo $d; // Error
Konstanten
- haben kein
$im Namen - werden mit
consterzeugtconst name = wert; - der Zugriff erfolgt über den Namen, ohne
$ - Wert der Konstanten lässt sich nicht mehr ändern
- erneute Zuweisung führt zu einer Fehlermeldung
- können nicht mehr entfernt werden
- Alte Methode über
define()(⇔#definein C) sollte nicht mehr genutzt werden
Beispiel: Konstanten
const PI = 3.14159265;
echo PI; // -> 3.14159265
function flaeche($radius) {
return PI * $radius * $radius;
}
echo flaeche(2); // -> 12.5663706
Beispiel: Konstanten (Old School)
define('PI', 3.14159265);
echo PI; // -> 3.14159265
function flaeche($radius) {
return PI * $radius * $radius;
}
echo flaeche(2); // -> 12.5663706
Strings
Begrenzer für Strings ist " oder '
"...": Variablen und Sonderzeichen werden ausgewertetecho ("<td>Anzahl: $anzahl</td>");'...': Variablen und Sonderzeichen werden nicht ausgewertet- Strings können Strings mit anderem Begrenzer enthalten
echo('<img src="portrait.jpg">');echo("<img src='portrait.jpg'>");
Sonderzeichen wie in Java
- Stringverkettung mit
.$greeting = "Hello " . $name; - Zugriff auf einzelne Zeichen (beginnt bei 0)
$zeichen = $greeting[4]; \0ist keine Endmarke, sondern ein normales Zeichen- Typischer Fehler
"Hello " + "World"ergibt 0"Hello " . "World"ergibt"Hello World"
PHP und Unicode
PHP-Strings sind nicht Unicode
- 1 Byte pro Zeichen
- keine Probleme bei ISO-8859-x Zeichensätzen
- Probleme bei anderen Zeichensätzen
- PHP 6 sollte auf Unicode basieren, wurde aber eingestampft
Ausweg: PHP-Extension mbstring
- muss explizit installiert werden
- bietet Ersatz für die Standard-Stringfunktionen von PHP
- Präfix
mb_für alle Funktionen
bin2hex() Converts a string of ASCII characters to hexadecimal values
hex2bin() Converts a string of hexadecimal values to ASCII characters
crc32() Calculates a 32-bit CRC for a string
md5() Calculates the MD5 hash of a string
sha1() Calculates the SHA-1 hash of a string
crypt() One-way string hashing
strsplit() Splits a string into an array
explode() Breaks a string into an array
implode() Returns a string from the elements of an array
join() Alias of implode()
html_entity_decode() Converts HTML entities to characters
htmlentities() Converts characters to HTML entities
htmlspecialchars_decode() Converts some predefined HTML entities to characters
htmlspecialchars() Converts some predefined characters to HTML entities
strtok() Splits a string into smaller strings
chop() Removes whitespace or other characters from the right end of a string
trim() Removes whitespace or other characters from both sides of a string
ltrim() Removes whitespace or other characters from the left side of a string
rtrim() Removes whitespace or other characters from the right side of a string
ord() Returns the ASCII value of the first character of a string
chr() Returns a character from a specified ASCII value
strrot13() Performs the ROT13 encoding on a string
quoted_printable_decode() Converts a quoted-printable string to an 8-bit string
quoted_printable_encode() Converts an 8-bit string to a quoted printable string
quotemeta() Quotes meta characters
sscanf() Parses input from a string according to a format
str_getcsv() Parses a CSV string into an array
str_ireplace() Replaces some characters in a string (case-insensitive)
strpad() Pads a string to a new length
str_repeat() Repeats a string a specified number of times
str_replace() Replaces some characters in a string (case-sensitive)
str_shuffle() Randomly shuffles all characters in a string
str_wordcount() Count the number of words in a string
strcasecmp() Compares two strings (case-insensitive)
strchr() Finds the first occurrence of a string inside another string (alias of strstr())
strcmp() Compares two strings (case-sensitive)
strip_tags() Strips HTML and PHP tags from a string
strstr() Finds the first occurrence of a string inside another string (case-sensitive)
strpos() Returns the position of the first occurrence of a string inside another string (case-sensitive)
strrchr() Finds the last occurrence of a string inside another string
strlen() Returns the length of a string
strrev() Reverses a string
strtolower() Converts a string to lowercase letters
strtoupper() Converts a string to uppercase letters
strtr() Translates certain characters in a string
substr() Returns a part of a string
Erzeugung von Ausgaben
| Befehl | Beschreibung |
|---|---|
echo str1 [, str2 ...] | Ausgabe von Strings |
print(string) | Ausgabe eines Strings |
print_r(objekt) | Gibt Objekt rekursiv aus (debugging) |
printf(format [, args]) | formatierte Ausgabe (entspricht C printf und Java System.out.printf) |
<?= $var ?> | Ausgabe einer Variable oder eines Ausdrucks (entspricht <?php print($var); ?>) |
flush() | leert den Ausgabepuffer |
Beispiel: Ausgaben
<?php
$name = "Thomas";
echo "<b>", "Hallo ", $name, "</b>" , "<br/>";
print("<b>" . "Hallo " . $name . "</b>" . "<br/>");
printf("<b>Hallo %s</b><br/>", $name);
?>
<b>Hallo <?= $name ?> </b><br/>
Hallo Thomas
Hallo Thomas
Hallo Thomas
Hallo Thomas
Funktionen
- Eigene Funktionen werden mit function definiert
function greet1($vorname, $nachname) { ... } - Optionale Parameter sind am Ende der Parameterliste möglich
function greet2($name, $greeting = "Hallo") { ... } - PHP unterstützt Call-by-Value (default) und Call-by-Reference
function promotion(&$nombre) { ... }
Beispiel: Funktionen
function greet1($vorname, $nachname) {
echo "Hello $vorname $nachname";
return true; // Rckgabewert
}
greet1("Thomas", "Smits"); // -> Hello Thomas Smits
function greet2($name, $greeting = "Hallo") {
echo $greeting, " ", $name;
}
greet2("Thomas", "Gruezi"); // -> Gruezi Thomas
greet2("Thomas"); // -> Hallo Thomas
function promotion(&$nombre) {
$nombre = "Dr. " . $nombre;
}
$name = "Meier";
promotion($name);
echo $name; // -> Dr. Meier
Anonyme Funktionen
- Definition über
function:$f = function ($x) { $x * $x }; - Definition über
fnund=>:$f = fn ($x) => $x * $x; - Aufruf über Variable und
():$f(5);
Closure
- Eine anonyme Funktion nimmt ihre Umgebung (Variablen) bei der Deklaration mit
- Variablen leben so lange, wie die Funktion lebt
- bei
fnund=>passiert dies automatisch - bei
functionmüssen die Variablen mitusedeklariert werden - die Variable wird zum Zeitpunkt der Funktionserzeugung „gecaptured“
Beispiel: Closure
$extern = 23;
$adder1 = function ($x) use ($extern) { return $x + $extern; };
$adder2 = fn ($x) => $x + $extern;
echo $adder1(19); // -> 42
echo $adder2(19); // -> 42
$extern = 33;
echo $adder1(19); // -> 42
echo $adder2(19); // -> 42
Globale Variable in Funktionen
- Globale Variablen sind nicht automatisch in Funktionen sichtbar
- Müssen mit Schlüsselwort
globalbekannt gemacht werden
function tuwas() {
echo $a;
}
$a = "Hallo";
tuwas(); // -> keine Ausgabe
function tuwas() {
global $a;
echo $a;
}
$a = "Hallo";
tuwas(); // -> Hallo
Wiederverwendung
Klassen oder Funktionen können eingebunden werden
require_once "php-datei";oderinclude_once "php-datei";- vergleichbar mit
#includein C++ - bedingte Einbindung über if-Anweisungen möglich
- Dateiname kann zur Laufzeit berechnet werden
- jede Datei wird nur einmal inkludiert
- fehlende Datei bewirkt
- Abbruch bei
require_once - Warnung bei
include_once - Variablen sind (leider) übergreifend sichtbar
Beenden des PHP-Skripts
Skripte können an beliebiger Stelle beendet werden
exit;- Beendet Skriptexit();- Beendet Skriptexit($code);- Beendet Skript mit Fehlercodeexit($string);- Beendet Skript und gibt Fehlerstring ausdie- Ist ein Synonym für exit