Standard PHP Library
Aus php bar
Die Standard PHP Library (SPL) ist eine Sammlung von Interfaces und Klassen zum Lösen von Standardproblemen. Diese ergänzen vorallem die hybride (prozedural und oo) Sprache PHP für `echte' Objektorientierte Programmierung. Beispielsweise ist in PHP ein Array kein Objekt, mithilfe der SPL ist jedoch ein Arrayobjekt durch das ArrayObject schnell realisiert.
SPL ist seit php Version 5.3.0 fester Bestandteil und war bereits schon mit 5.0.0 als Standarderweiterung vorhanden.
Inhaltsverzeichnis |
Übersicht
SPL
- Iteratoren
- Verzeichnisse und Dateien
- XML
- Array Overloading (ArrayObject, ArrayIterator, RecursiveArrayIterator)
- Counting
- Observer, mögliche Implementierung des Entwurfsmuster Observer (Beobachter)
- Exceptions
- Funktionen (z.B: spl_autoload)
Iteratoren
ArrayObject
Arrayiterator, der Iterator erlaubt das Setzen und Modifizieren von Werten, sowohl als auch das Iterieren von Arrays und Objekten. Zum Iterieren mit Arrayzugriff auf Objekte muss man die Interfaces ArrayAccess und IteratorAggregate implementieren.
1 class DataRegistry implements ArrayAccess, IteratorAggregate 2 { 3 4 /* {{{ getIterator IteratorAggregate */ 5 public function getIterator() 6 { 7 return new ArrayObject($this); 8 } 9 /* }}} */ 10 11 /* {{{ offsetExists ($offset) ArrayAccess */ 12 public function offsetExists($offset) 13 { 14 return array_key_exists($offset,get_object_vars($this)); 15 } 16 /* }}} */ 17 18 /* {{{ offsetGet($offset) ArrayAccess */ 19 public function offsetGet($offset) 20 { 21 if (array_key_exists($offset,get_object_vars($this))) { 22 return $this->{$offset}; 23 } 24 } 25 /* }}} */ 26 27 /* {{{ offsetSet($offset) ArrayAccess */ 28 public function offsetSet($offset, $value) 29 { 30 $this->{$offset} = $value; 31 } 32 /* }}} */ 33 34 /* {{{ offsetUnset($offset) ArrayAccess */ 35 public function offsetUnset($offset) 36 { 37 if (array_key_exists($offset,get_object_vars($this))) { 38 unset($this->{$offset}); 39 } 40 } 41 /* }}} */ 42 43 public function add($key, $value) 44 { 45 $this->{$key} = $value; 46 } 47 48 public function set($key, $value) 49 { 50 $this->add($key,$value); 51 } 52 53 public function get($key) 54 { 55 return (isset($this->{key})) ? 56 $this->{$key} : FALSE; 57 } 58 59 public function __set($key, $value) 60 { 61 $this->add($key, $value); 62 } 63 }
Das ArrayObject verwendet den ArrayIterator in der foreach Schleife:
1 $reg = new DataRegistry(); 2 3 $reg->add('hello', 'php'); 4 $reg->add('apfel', 1); 5 $reg->add('birne', 2); 6 7 foreach ($reg as $key => $value) { 8 echo $key .':'; 9 if (!is_object($value)) { 10 echo $value; 11 } else { 12 echo "OBJECT (ausgabe mit __toString): ".$value; 13 } 14 echo "\n"; 15 } 16 17 // ARRAY ACCESS 18 echo $reg['hello'] ."\n"; 19 // SETZEN VON WERTEN MIT ARRAY ACCESS 20 $reg['hello'] = 'SPL!';
Verzeichnisse und Dateien
RecursiveDirectoryIterator
Verzeichnisse und Dateien iterieren (im Beispiel vom aktuellen Verzeichniss) mit dem RecursiveDirectoryIterator und dem resultierendem SplFileInfo Objekt :
1 $files = new RecursiveIteratorIterator( 2 new RecursiveDirectoryIterator('.'), 3 RecursiveIteratorIterator::SELF_FIRST); 4 5 6 foreach($files as $file) { 7 // $file ist ein SplFileInfo object 8 if ($file->isDir()) { 9 echo (string) $file . "\n"; 10 } else { 11 echo " |-- ".(string) $file . "\n"; 12 } 13 }
SPL Funktionen
Autoload
Die Funktion: `spl_autoload_register'
zum Registrieren von weiteren Autoload-Funktionen, z.B. der Methode `bar' der Klasse `Foo' :
1 spl_autoload_register('Foo::bar');
Registrieren einer bestehender Autoload-Funktionen:
1 if (function_exists('__autoload')) { 2 spl_autoload_register('__autoload'); 3 }

