einen wunderschönen guten morgen. ich bin zwar neu in dem forum, wage es mir trotzdem diese frohe botschaft zu überbringen, da es ja meines achtens nach noch keiner tat: seit dem 29.6.2003 ist PHP 5.0.0 verfügbar. es ist zwar nur eine beta version, aber es kommen ja bald mehr.
was hat sich denn verändert?
1. zend engine 2.0
php unterstützt die zend engine 2.0, was die meisten veränderungen erst möglich macht.
2. neue variablentypen für klassen
in klassen können jetzt die variablentypen private und protected verwendet werden können, wie es etwa in sprachen - etwa java oder c++ - typisch ist. variablen vom typen private können nur von funktionen der klasse selbst genutzt werden, für den rest des progammes sind sie unsichtbar. die vom typen protected können zwar vom gesammten programm gelesen, jedoch nur von klassen-internen funktionen verändert werden.
beispiel:
3. neue methodentypen
private und protected können auch auf methoden (funktionen innerhalb einer klasse) angewendet werden. ich glaube ein beispiel ist nicht nötig.
4. abstakte klassen
wie in vielen anderen sprachen gibt es nun auch abstakte klassen.
beispiel:
5. interfaces
es gibt für klassen nun interfaces, sie geben vor wie eine klasse auszusehen hat. ich denkemal das es bald bei php pear zum einsatz kommen wird. es ist auch möglich mehrere interfaces bei einer klasse anzuwenden. sie werden dann einfach durch ein komma getrennt.
beispiel:
6. methodentyp final
der methodentyp final verhindert das überschreiben einer funktion durch eine subklasse. auch hier braucht ihr sicher kein besipiel.
klonen von objekten
es ibt einen magische klasse wodurch das klonen von objekten möglich wird. der vorteil dieser variante des duplizieren ist, dass der vorgang von der klasse beeinflussbar ist.
Beispiel:
7. konstruktoren und destuktoren
die aus php pear mehr oder weniger bekannten konstruktoren und destruktoren sind nun ein allgemeiner bestandteil von php. für alles die es nicht wissen: es ahndelt sich um die magischen methoden __constuct() und __destruct().
8. konstanten
auch innerhalb von klassen sind nun konstanten möglich.
Beispiel:
9. static
wie in anderen sprachen kann nun auch der typ static auf methoden und variablen angewannt werden.
10. __autoload()
ich glaube, ich geb euch einfach mal ein besipiel. ihr werdet es schon peilen:
11. __get() und __set()
die magischen methoden __get() und __set() können das setzen und lesen von variablen einer klasse beeinflussen.
beispiel.
11. __call()
__call() ist die magische methode zur kontrolle von methoden-aufrufen.
besipiel:
was hat sich denn verändert?
1. zend engine 2.0
php unterstützt die zend engine 2.0, was die meisten veränderungen erst möglich macht.
2. neue variablentypen für klassen
in klassen können jetzt die variablentypen private und protected verwendet werden können, wie es etwa in sprachen - etwa java oder c++ - typisch ist. variablen vom typen private können nur von funktionen der klasse selbst genutzt werden, für den rest des progammes sind sie unsichtbar. die vom typen protected können zwar vom gesammten programm gelesen, jedoch nur von klassen-internen funktionen verändert werden.
beispiel:
Code:
<?php // beispielklasse class beispiel { // beispielvariablen private $bsp_1 = "Beispiel 1"; protected $bstp_2 = "Beispiel 2"; // funktion zum lesen von varialen function getVar($name) { if(!isset($this->$name)) return false; else return $this->$name; } // funktion zum setzen von variablen function setVar($name, $val) { if(!isset($this->$name)) return false; else return $this->$name = $val; } } $obj = new besipiel(); echo $obj->bsp_1; // funktioniert nicht echo $obj->getVar("bsp_1"); // funktioniert echo $obj->bsp_2; // funktioniert $obj->bsp_2 = "Beispiel 3"; // funktioniert nicht echo $obj->setVar("bsp_2", "Beispiel 3"); // funktioniert ?>
private und protected können auch auf methoden (funktionen innerhalb einer klasse) angewendet werden. ich glaube ein beispiel ist nicht nötig.
4. abstakte klassen
wie in vielen anderen sprachen gibt es nun auch abstakte klassen.
beispiel:
Code:
<?php // abstakte klasse abstract class AbstractClass { abstract public function test(); } // vererbung class ImplementedClass extends AbstractClass { public function test() { echo "ImplementedClass::test() called.\n"; } } $o = new ImplementedClass; $o->test(); ?>
es gibt für klassen nun interfaces, sie geben vor wie eine klasse auszusehen hat. ich denkemal das es bald bei php pear zum einsatz kommen wird. es ist auch möglich mehrere interfaces bei einer klasse anzuwenden. sie werden dann einfach durch ein komma getrennt.
beispiel:
Code:
<?php interface Throwable { public function getMessage(); } class Exception implements Throwable { public function getMessage() { // ... } ?>
6. methodentyp final
der methodentyp final verhindert das überschreiben einer funktion durch eine subklasse. auch hier braucht ihr sicher kein besipiel.
klonen von objekten
es ibt einen magische klasse wodurch das klonen von objekten möglich wird. der vorteil dieser variante des duplizieren ist, dass der vorgang von der klasse beeinflussbar ist.
Beispiel:
Code:
<?php $copy_of_object = $object->__clone(); ?>
die aus php pear mehr oder weniger bekannten konstruktoren und destruktoren sind nun ein allgemeiner bestandteil von php. für alles die es nicht wissen: es ahndelt sich um die magischen methoden __constuct() und __destruct().
8. konstanten
auch innerhalb von klassen sind nun konstanten möglich.
Beispiel:
Code:
<?php class Foo { const constant = "constant"; } ?>
wie in anderen sprachen kann nun auch der typ static auf methoden und variablen angewannt werden.
10. __autoload()
ich glaube, ich geb euch einfach mal ein besipiel. ihr werdet es schon peilen:
Code:
<?php function __autoload($className) { include_once $className . ".php"; } $object = new ClassName; ?>
die magischen methoden __get() und __set() können das setzen und lesen von variablen einer klasse beeinflussen.
beispiel.
Code:
<?php class Foo { var $hallo = "hallo"; function __get($name) { return "blah"; } function __SET($name, $val) { return false; } } $obj = new Foo(); eche $obj->hallo; // gibt "blah" aus $obj->hallo = "text" // nicht möglich ?>
__call() ist die magische methode zur kontrolle von methoden-aufrufen.
besipiel:
Code:
<?php class Foo { function __call($methode, $parameter) { if(!function_exists($this->$methode)) { echo "Die Funktion Foo::$methode existiert nicht!"; return false; } else return $this->$methode; } }
Kommentar