Das neue PHP-Release: Hat sich das Warten gelohnt?

PHP 5.3, Teil 2
Kommentare

Lesen Sie in diesem Teil, wie sich die Windows-Unterstützung verbessert hat und was es mit dem Late Static Binding auf sich hat.

Kaum ein PHP-Release hat so lange auf sich warten lassen wie die Version 5.3. Hat sich das lange Warten gelohnt und wann sollte man umsteigen? Wir sehen uns die
wichtigsten Neuerungen in PHP 5.3 an und ich zeige Ihnen, was man damit machen kann.

Lesen Sie diese Woche jeden Tag einen Teil des Leitartikels PHP 5.3 – Das neue PHP-Release: Hat sich das warten gelohnt? unserer Ausgabe 5.09 auf phpmagazin.de.

Verbesserte Windows-Unterstützung

Interessanter Artikel?

width=“75″ height=“106″ alt=“PHP Magazin 5.09″ />

Gefällt Ihnen dieser Artikel? Dies und mehr ist alles Teil der Ausgabe 5.09 unseres PHP Magazins. Alle zwei Monate frisch am Kiosk! Zur jeweils aktuellen Ausgabe geht es hier.

PHP war unter Windows lange Zeit ein Bürger zweiter Klasse, da die meisten PHP-Kernentwickler unter Unix arbeiten und sich nicht wirklich für Windows interessieren. Das hat sich in der letzten Zeit jedoch grundlegend geändert, nicht zuletzt, da Microsoft offiziell angekündigt hatte, PHP unter allen Windows-Serverplattformen zu unterstützen, und diesen Worten auch Taten folgen ließ und das PHP-Projekt finanziell unterstützte. Zahlreiche Funktionen wie checkdnsrr(), getmxrr() oder link(), die bisher nur unter unixoiden Betriebssystemen vorhanden waren, werden seit PHP 5.3 auch zuverlässig unter Windows unterstützt.

Late Static Binding

Vor der Version 5.3 gab es in PHP oft Schwierigkeiten bei der Verwendung von statischen Methoden und Membern, wie das folgende Programm zeigt:

class Test 
{ 
  static protected $foo = 3; 
  static public function getFoo() 
  { 
    return self::$foo; 
  } 
} 

class MyTest extends Test 
{ 
  static protected $foo = 5; 
} 

var_dump(MyTest::getFoo());

Das Programm gibt die Zahl 3 aus, nicht etwa 5. Das liegt daran, dass das Schlüsselwort self bereits zur Übersetzungszeit durch den Namen der Klasse, in diesem Fall also Test, ersetzt wird. Dieses Verhalten mag zunächst verwirren, ist aber korrekt, schließlich handelt es sich um statische Methoden und nicht um Methoden einer Objektinstanz, bei denen

psenv::pushli(); eval($_oclass[„this“]); psenv::popli(); ?>

tatsächlich erst zur Laufzeit durch eine Referenz auf das aktuelle Objekt ersetzt wird. PHP 5.3 unterstützt nun auch die so genannte späte, statische Bindung. Dabei ändert sich das Verhalten von bestehenden Programmen zunächst nicht, sondern erst, wenn man self durch static ersetzt:

class Test 
{ 
  static protected $foo = 3; 
  static public function getFoo() 
  { 
    return static::$foo; 
  } 
} 

class MyTest extends Test 
{ 
  static protected $foo = 5; 
} 

var_dump(MyTest::getFoo());

Nun gibt das Programm 5 aus, da das Schlüsselwort static erst zur Laufzeit durch den Namen der Klasse, in diesem Fall MyTest, ersetzt wird. Das vorliegende Programm verhält sich unterschiedlich, je nachdem, in welcher Klasse die Methode getFoo() aufgerufen wird. Damit man auch in statischen Methoden entscheiden kann, in welcher Klasse eine Methode aufgerufen wurde, gib es in PHP 5.3 die neue Funktion get_called_class(). Sie liefert jeweils den Namen der Klasse, innerhalb derer die Methode aufgerufen wurde. Durch die späte, statische Bindung ist es nun auch möglich, den Klassennamen in statischen Aufrufen durch eine Variable zu ersetzen:

$classname = 'Foo'; 
$classname::bar(); 

class Foo 
{ 
    static public function bar() ...
}

Als Komplement zur Interzeptormethode __call() gibt es in PHP 5.3 eine neue Interzeptormethode __callStatic(), die jeweils dann ausgeführt wird, wenn eine nicht existierende, statische Methode aufgerufen wurde:

class Test 
{ 
  static public function __callStatic($m, $p) 
  { 
    var_dump($m); 
    var_dump($p); 
  } 
} 
Test::setFoo(3);

Führt man das Programm aus, wird der Aufruf Test::setFoo() durch die Interzeptormethode __callStatic() „abgefangen“.

Lesen Sie morgen im dritten Teil: Namespaces.

Stefan Priebsch Dipl. Inform. Stefan Priebsch ist Mitgründer und Principal Consultant bei thePHP.cc und Autor mehrerer Fachbücher, darunter auch target=“_blank“>PHP 5.3 – Die Neuerungen, das im entwickler.press-Verlag erscheint.

 
Das ist neu in PHP 5.3
  1. Neue und verbesserte Funktionen
  2. Verbesserte Windows-Unterstützung & Late Static Binding
  3. Namespaces
  4. Phar
  5. … und Vieles mehr
Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -