Standard PHP Library

Aus php bar

(Weitergeleitet von SPL)
Wechseln zu: Navigation, Suche

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.

 class DataRegistry implements ArrayAccess, IteratorAggregate
 {
 
   /* {{{ getIterator IteratorAggregate */
   public function getIterator()
   {
     return new ArrayObject($this);
   }
   /* }}} */
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:

 $reg = new DataRegistry();
 
 $reg->add('hello', 'php');
 $reg->add('apfel', 1);
 $reg->add('birne', 2);
 
 foreach ($reg as $key => $value) {
     echo $key .':';
     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 :

 $files = new RecursiveIteratorIterator(
                  new RecursiveDirectoryIterator('.'),
                     RecursiveIteratorIterator::SELF_FIRST);
 
 
 foreach($files as $file) {
   // $file ist ein SplFileInfo object 
   if ($file->isDir()) {
     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 }


Links

Persönliche Werkzeuge