Christian Fein
Erfahrenes Mitglied
Eben auf entwickler.com etwas über die ZEND 2 Engine gelesen welche in den Zukuenftigen Versionen von PHP eingesetzt wird.
Meine Wünsche erfüllen sich den News nach zu urteilen wird das PHP Programmieren interressanter und mächtiger.
PHP scheint sich nach dem Logischen Prinzip mehr OOP zu entwickeln was ich anhand mehrerer in den News gegebenen Beispielen aufzeigen will.
Endlich werden Destruktoren unerstützt.
Für jene ohne OOP (bsp C++) Kenntnisse:
Konstruktoren werden automatisch bei der instanzierung einer klasse aufgerufen und eignen sich deshalb dazu ein Objekt korrekt zu initialisieren. Die Konstruktoren waren auch schon in Zend 1 die wir alle kennen enthalten.
Jetzt werden zudem aber auch Destruktoren unterstützt welche wie in java (nein nicht javascript ) dann aufgerufen werden sobald die letzte refernz auf ein object verfällt.
Dies erleichtert ungemein einen Object Orientierten Programmentwurf.
Ausnahme handling:
Im alten PHP gabs kein korrektes Ausnahme handling. Dies machte es leider allzuoft notwendig Ausdrücke auf Durchführbarkeit zu testen bevor der Ausdrauk durchgeführt werden sollte. Durch Ausnahmehandling ist es nun möglich einen Ausdruck dürzuführen und bei scheitern eine Ausnahme zu senden und diese Abzufangen:
Bei Java / C# u. C++ einer der mächtigsten Werkzeuge kontrollierter Programmierung.
Ich kommentiere:
Wir schreiben 2 Klassen eine Ausnahmeklasse welche im Konstruktor mit einer ausnahme instanziert wird und eine Klasse die von dieser Ausnahmeklasse erbt. Besonders schön zu sehen ist der try{} und catch{} block welcher folgendermassen zu übersetzen ist:
versuche ein MyExceptionFoo Objekt zu senden:
Bahndle gesendete MyException Objekte.
Objecte koenenn nun als Returnwert zurückgegeben werden:
Statische Membervariablen statischer Klassen koennen nun initialisiert werden:
Referenz Variablen koennen nun mit Standartwert übergeben werden.
PS: hier in diesem Beispiel währe ein Exceptionhandling von vorteil aber wohl zu unübersichtlich
PHP wird endlich wieder interressant ...
gruss holyfly
Meine Wünsche erfüllen sich den News nach zu urteilen wird das PHP Programmieren interressanter und mächtiger.
PHP scheint sich nach dem Logischen Prinzip mehr OOP zu entwickeln was ich anhand mehrerer in den News gegebenen Beispielen aufzeigen will.
PHP:
<?php
class MyDestructableClass
{
function __construct()
{
print "In constructor\n";
$this->name = 'MyDestructableClass';
}
function __destruct()
{
print 'Destroying ' . $this->name . "\n";
}
}
Für jene ohne OOP (bsp C++) Kenntnisse:
Konstruktoren werden automatisch bei der instanzierung einer klasse aufgerufen und eignen sich deshalb dazu ein Objekt korrekt zu initialisieren. Die Konstruktoren waren auch schon in Zend 1 die wir alle kennen enthalten.
Jetzt werden zudem aber auch Destruktoren unterstützt welche wie in java (nein nicht javascript ) dann aufgerufen werden sobald die letzte refernz auf ein object verfällt.
Dies erleichtert ungemein einen Object Orientierten Programmentwurf.
PHP:
<?php
class MyDestructableClass
{
function __construct()
{
print "In constructor\n";
$this->name = 'MyDestructableClass';
}
function __destruct()
{
print 'Destroying ' . $this->name . "\n";
}
}
$obj = new MyDestructableClass();
?>
Ausnahme handling:
Im alten PHP gabs kein korrektes Ausnahme handling. Dies machte es leider allzuoft notwendig Ausdrücke auf Durchführbarkeit zu testen bevor der Ausdrauk durchgeführt werden sollte. Durch Ausnahmehandling ist es nun möglich einen Ausdruck dürzuführen und bei scheitern eine Ausnahme zu senden und diese Abzufangen:
Bei Java / C# u. C++ einer der mächtigsten Werkzeuge kontrollierter Programmierung.
PHP:
<?php
class MyException
{
function __construct($exception)
{
$this->exception = $exception;
}
function Display()
{
print "MyException:
$this->exception\n";
}
}
class MyExceptionFoo extends MyException {
function __construct($exception)
{
$this->exception = $exception;
}
function Display()
{
print "MyException:
$this->exception\n";
}
}
try {
throw new MyExceptionFoo('Hello');
}
catch (MyException $exception)
{
$exception->Display();
}
?>
Wir schreiben 2 Klassen eine Ausnahmeklasse welche im Konstruktor mit einer ausnahme instanziert wird und eine Klasse die von dieser Ausnahmeklasse erbt. Besonders schön zu sehen ist der try{} und catch{} block welcher folgendermassen zu übersetzen ist:
versuche ein MyExceptionFoo Objekt zu senden:
Bahndle gesendete MyException Objekte.
Objecte koenenn nun als Returnwert zurückgegeben werden:
PHP:
<?php
class Circle
{
function draw()
{
print "Circle\n";
}
}
class Square
{
function draw()
{
print "Square\n";
}
}
function ShapeFactoryMethod($shape)
{
switch ($shape)
{
case 'Circle':
return new Circle();
case 'Square':
return new Square();
}
}
ShapeFactoryMethod('Circle')->draw();
ShapeFactoryMethod('Square')->draw();
?>
PHP:
<?php
class foo
{
static $my_static = 5;
}
print foo::$my_static;
?>
PHP:
<?php
function my_function(&$var = null)
{
if ($var === null)
{
die('$var needs to have a value');
}
}
?>
PHP wird endlich wieder interressant ...
gruss holyfly