| |
| * Link führt ins Internet |
|
| |
Die Zend Engine 2 stellt ein Versuch dar, PHP5 für den Einsatz im Enterprise-Sektor konkurrenzfähig zu gestalten und einzugliedern. Sicherlich wurde PHP auch schon vorher von Firmen gezielt eingesetzt, aber die Unterstützung in punkto Zuverlässigkeit und Sicherheit, die eine Programmiersprache geben sollte, war keineswegs zufriedenstellend ausgeprägt.
In der folgenden Übersicht befinden sich alle Kernbestandteile der Änderungen an der Zend Engine 2.0. In Zukunft werden wohl noch weitere Features auf Sie als Entwickler zu kommen. Das gesetzte Ziel fokussierte sich primär auf eine verbesserte OO-Unterstützung und die Implementierung neuer Konstrukte, um das OO-Design zu erleichtern.
. Objekte-Klonen
. Objekt-Dereferenzierung
. Konstruktoren & Destruktoren
. Builtin Backtracing
. Verbesserte OO-Verhaltensweise
. Implizite Referenzierung von Objektinstanzen
. Optimierter Objektrückgabemechanismus
. Exception Handling
. Datenkapselung
. Namespaces/Nested Classes
Hier ein Beispiel zu den OOP Erweiterungen, so dass Sie sich ein Bild davon machen können:
<?php
// Schnittstelle
// Gewährleistet die Kommunikation zwischen Klassen
interface Wachstum {
// Abstraktion einer Methode
abstract public function altern();
}
// Abstraktion einer Klasse
abstract class Lebewesen implements Wachstum {
// Eigenschaften schützen, so dass über ein
// Objekt keine direkter Zugriff möglich ist!
protected $alter = 0;
protected $geschlecht;
abstract public function altern();
public final function getAlter() {
return $this->alter;
}
}
// Klasse Mensch wird durch die Superklasse
// Lebewesen erweitert (Vererbung)
class Mensch extends Lebewesen {
protected static $vorfahre = "Affe";
protected $name;
// Konstruktor
function __construct($name, $geschlecht) {
$this->name = $name;
$this->geschlecht = $geschlecht;
$this->altern();
}
// Destruktor
function __destruct() {
echo "<br>...und so scheidet ".$this->name." dahin";
}
// Finale Methoden
final function altern() {
$this->alter++;
}
final function getName() {
return $this->name;
}
function umbenennen($neuerName) {
$this->name = $neuerName;
}
function geburtstagFeiern() {
$this->altern();
echo "trööööt";
}
// Statische Methoden
public static final function neueEvolutionstheorie($neuerVorfahre) {
Mensch::$vorfahre = $neuerVorfahre;
}
public static final function getVorfahre() {
return Mensch::$vorfahre;
}
}
// Klasse Deutscher erbt von Mensch
class Deutscher extends Mensch {
function __construct($name, $geschlecht) {
parent::__construct($name, $geschlecht);
}
function umbenennen($neuerName, $geduldsfaden=false) {
$erfolg = $this->behoerdengang($geduldsfaden);
if ($erfolg) $this->name = $neuerName;
}
// Private Methode
private function behoerdengang($geduldsfaden) {
try {
if (!$geduldsfaden)
throw new Exception("Umbennenung fehlgeschlagen!");
return true;
} catch (Exception $prop) {
echo $prop->getMessage()."<br>";
return false;
}
}
}
// Autor erzeugen (Objekt)
$autor = new Mensch("Matthias", "m");
// Auf die Methode getName() zugreifen
echo $autor->getName()."<br>";
// Autor umbenennen
$autor->umbenennen("Matze");
// Neuen Namen ausgeben
echo "Neuer Name: ".$autor->getName()."<br>";
// Folgende Codezeile erezeugt einen Fehler
// da die Eigenschaft geschützt ist!
// echo $autor->geschlecht;
// An das Alter gelangt man mit Hlfe der
// Funktion getAlter()
echo "Alter des Autors: " . $autor->getAlter() ."<br>";
// Stammt Autor vom Mensch ab?
if ($autor instanceof Mensch) {
echo $autor->getName()." ist ein Mensch!<br>";
}
// Wer sind die Vorfahren der Menschen
echo "Der Mensch ist ein Nachfahre von ".Mensch::getVorfahre()."<br>";
// Neue Theorie
Mensch::neueEvolutionstheorie("Alien");
// Wer sind nun die Vorfahren der Menschen
echo "Der Mensch ist ein Nachfahre von ".Mensch::getVorfahre()."<br>";
// Autorin erzeugen (Objekt)
$autorin = new Deutscher("Caroline", "w");
// Die Methode behoerdengang ist über
// das Objekt nicht zu erreichen, da
// diese als private gekennzeichnet ist!
// $autorin->behoerdengang(true);
// Gibt den Ausnahmefall aus da das
// zweite Argument false ist (throw/catch).
$autorin->umbenennen("Caro", false);
?>
|
Ausgabe
Matthias
Neuer Name: Matze
Alter des Autors: 1
Matze ist ein Mensch!
Der Mensch ist ein Nachfahre von Affe
Der Mensch ist ein Nachfahre von Alien
Umbennenung fehlgeschlagen!
...und so scheidet Caroline dahin
...und so scheidet Matze dahin
|
|
|
|
|
|
|
|