Interzeptor |
Beschreibung |
.small-font.inline-code[```php
__call(string $fctname,```] .small-font.inline-code[```php
array $parameter)
```]
|
Bei Aufrufversuch einer Methode, auf die man keinen Zugriff hat (z.B. bei falscher Sichtbarkeitsstufe) |
.small-font.inline-code[```php
__callStatic(string $fctname,```] .small-font.inline-code[```php
array $parameter)
```]
|
…für statische Methoden |
.small-font.inline-code[```php
__get(string $varname)
```]
|
Aufruf bei einem Lesezugriff auf eine nicht vorhandene oder nicht zugängliche Objektvariable |
.small-font.inline-code[```php
__set(string $varname, $value)
```]
|
Bei fehlerhaften Schreibversuch auf eine Objektvariable |
.small-font.inline-code[```php
__isset(string $varname)
```]
|
Bei fehlerhaften Zugriff auf Objektvariablen per .monospace.hljs-keyword[isset] |
.small-font.inline-code[```php
__unset(string $varname)
```]
|
Bei Anwendung von .monospace.hljs-keyword[unset] auf eine nicht existente oder nicht sichtbare Objektvariable |
]
]
---
# OOP: .darkblue[Magische Methoden – .monospace[__autoload]]
.condensed[
- Beim Versuch eine nicht existente Klasse zu instanziieren (via .monospace.hljs-keyword[new])
- Beispiel
- Jede Klasse sei in einer eigenen Datei im Unterverzeichnis class abgelegt, Klassenname entspricht Dateiname
- Folgender Code ladet automatisch fehlende Klassen nach:
.small-font.no-text-indent[```php
function __autoload($class){
include_once 'class/'.$class.'.php';
}
```]
Funktion |
Beschreibung |
.small-font.inline-code[```php
bool class_exists(```] .small-font.inline-code[```php
string $class_name```] .small-font.inline-code[```php
[, bool $autoload=true])
```]
|
Prüft, ob eine Klasse verfügbar ist. Anwendung:
.small-font.inline-code[```php
function __autoload($class) {```] .small-font.inline-code[```php
include_once 'class/'.$class.'.class.php';```] .small-font.inline-code[```php
if (!class_exists($class, false)) {```] .small-font.inline-code[```php
die('Class ' . $class . ' not found!');```] .small-font.inline-code[```php
}```] .small-font.inline-code[```php
}```]
|
.small-font.inline-code[```php
string get_parent_class(```] .small-font.inline-code[```php
[mixed $object])
```]
|
Ermittelt die Elternklasse eines Objektes
|
.small-font.inline-code[```php
array get_class_methods(```] .small-font.inline-code[```php
mixed $class_name)
```]
|
Gibt die Methoden einer Klasse zurück
|
.small-font.inline-code[```php
array get_class_vars(```] .small-font.inline-code[```php
string $class_name)
```]
|
Liefert die .bold[vorbelegten] Werte von öffentlichen .bold[Objektvariablen] einer Klasse
|
.small-font.inline-code[```php
bool method_exists(```] .small-font.inline-code[```php
mixed $obj, string $method)
```]
|
Prüft auf Vorhandensein einer Methode in einer Klasse (.monospace[$obj] ist Objektinstanz oder Klassenname)
|
.small-font.inline-code[```php
bool property_exists(```] .small-font.inline-code[```php
mixed $obj, string $prop)
```]
|
Existenzüberprüfung von einer Objektvariablen in einer Klasse (.monospace[$obj] ist Objektinstanz oder Klassenname)
|
]
---
# .darkblue[Ausnahmen]
- Methoden der Klasse .monospace[Exception]
Methode |
Rückgabewert |
.small-font24.inline-code[```php
__construct($message=null, $code=0)
```]
|
.monospace[void] (Konstruktor)
|
.small-font24.inline-code[```php
getCode()
```]
|
Fehlercode
|
.small-font24.inline-code[```php
getFile()
```]
|
Datei mit dem Fehler
|
.small-font24.inline-code[```php
getLine()
```]
|
Zeilennummer
|
.small-font24.inline-code[```php
getMessage()
```]
|
Fehlermeldung
|
.small-font24.inline-code[```php
getTrace()
```]
|
Array der Ablaufverfolgung
|
.small-font24.inline-code[```php
getTraceAsString()
```]
|
formatierten String der Ablaufverfolgung
|
- Benutzerdefinierte Ausnahmen als Unterklassen von .monospace[Exception]
---
# .darkblue[Ausnahmebehandlung] – Analog zu anderen Programmiersprachen wie Java
.no-margin[
- .darkgray[Beispiel:]
]
.no-margin[
Beispiel |
Beschreibung |
.small-font.no-text-indent.inline-code[```php
setcookie('TestCookie', 'value');```]
|
Setzen eines Cookies, das nur während dieser Sitzung gilt |
.small-font.no-text-indent.inline-code[```php
setcookie('TestCookie', 'value', time()+3600);```]
|
Setzen eines Cookies, welches 1 Stunde gültig ist |
.small-font.no-text-indent.inline-code[```php
setcookie ('TestCookie', '', time() - 3600);```]
|
Löschen eines Cookies durch Angabe eines Verfall-Zeitpunktes in der Vergangenheit |
---
# .darkblue[Empfang eines HTTP-Cookies] vom Browser
- PHP: Ablage der vom Client gesendeten Cookies automatisch im auto-globalen Array .monospace[$_COOKIE]
- Entsprechende Konfiguration des Webservers vorausgesetzt
- Cookie kann i.d.R. nur in dem Verzeichnis ausgelesen werden, in dem er auch gesetzt worden ist
+ Verzeichnis/Pfad kann allerdings beim Setzen des Cookies angegeben werden (optionaler Parameter, z.B.
.small-font[```php
if (isset($_COOKIE['c'])) {
foreach ($_COOKIE['c'] as $name => $value) {
$name = htmlspecialchars($name);
$value = htmlspecialchars($value);
echo "$name : $value \n";
}
}
```]
|
Ausgabe:
three : c_three
two : c_two
one : c_one
|
]
---
# .darkblue[Zusammenfassung]
- Ähnliche und genauso mächtige Sprachkonstrukte zur Objektorientiertheit wie bei anderen Programmiersprachen (z.B. Java)
- interessante Detailabweichungen (durch Skriptsprachen möglich)
- Gute Unterstützung zum einfachen Umgang mit Sessions .darkgray[(vorherige Vorlesungseinheit!)] und Cookies zur Speicherung von Daten
- über einen vorgegebenen unter Umständen längeren Zeitraum (mittels Cookies)