Die Zukunft von PHP

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.
PHP:
<?php
class MyDestructableClass 
{
   function __construct() 
   {
    print "In constructor\n";
    $this->name = 'MyDestructableClass';
   }

   function __destruct() 
   {
   print 'Destroying ' . $this->name . "\n";
   }
}
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.
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();
    }
?>
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:
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();
?>
Statische Membervariablen statischer Klassen koennen nun initialisiert werden:
PHP:
<?php
   class foo 
   {
    static $my_static = 5;
   }
print foo::$my_static;
?>
Referenz Variablen koennen nun mit Standartwert übergeben werden.
PHP:
<?php
 function my_function(&$var = null) 
 {
   if ($var === null) 
   {
     die('$var needs to have a value');
   }
  }
?>
PS: hier in diesem Beispiel währe ein Exceptionhandling von vorteil aber wohl zu unübersichtlich

PHP wird endlich wieder interressant ...
gruss holyfly
 
Wahh da haste dir aber Mühe gemacht :)
Dankeschön :)

Eines ist allerdings unklar das was du unten beschreibst, das geht doch jetzt auch oder?

Referenz Variablen koennen nun mit Standartwert übergeben werden.
PHP:
<?php
 function my_function(&$var = null) 
 {
   if ($var === null) 
   {
     die('$var needs to have a value');
   }
  }
?>

ps:
dart.gif


hähähä :)
 
Zuletzt bearbeitet:
-

Das ist das Referenzzeichen.
Du kannst zum Beispiel die Referenz einer Variable an eine Funktion übergeben, dass heißt, du übergibst die Speicheradresse der Variable. Somit stehen alle Veränderungen, die du in der Funktion an der Variablen vornimmst, auch im Hauptscript zur Verfügung.

Referenzen sind auch eine Möglichkeit, mehrere Variablen in einer Funktion zu bearbeiten, da man mit return nur eine zurückgeben kann.
 
Genau und das ist die änderrung.

Wie caminus bereits richtig gesagt hat:
Mann übergibt nicht die Variable sondern nur eine Referenz auf die Variable.

Das war auch schon möglich in php :

mit meineFunction(&$eineReferenz)

das heisst wenn mann die Variable eineReferenz ändert so gilt das global.

Was nun neu ist das mann absofort auch bei Referenzvariablen Standartwerte übergeben kann ... das ging vorher nur bei Wertevariablen (also normalen)
 
Das ist nicht allzu kompliziert.

Es ist der logische Schritt weg vom Scripten zum Programmieren.

Bisher ist PHP eine ziemlich in grösseren Projekten unübersichtliche Scriptsprache.
Durch die möglichkeit von OOP wird das ganze nur aufgebohrt und bleibt auch bei 50.000 Zeilen code benutzbar ;)
Womit wie gesagt PHP erst zur Programmiersprache wird.
Muss noch ne strenge typisierung her und ich bin recht zufrieden

OOP in berenzten maße war ja schon möglich.
Mit dieser änderrung kommen wir den genialität von oop noch ein stückchen näher.

Fehlt noch mehfach vererbung (entweder wie in c++ oder java anhand von interfaces) und polymorphie.

Ich denke das wird bald eingesetzt in die neusten php versionen.
Auch wird deswegen nicht alles über den haufen geworden, leider wird mann bei php nicht zur nutzung von OOP gezwungen was leider immer noch schwer nachvollziehbaren code zur folge hat :(

Ich kann es aber nur jedem Programmierer und jenen die es werden wollen ans Herz legen auch mit PHP OOP zu lernen und zu Programmieren.
Ich kenne kein Groesseres PHP Projekt das nicht durch nutzung von OOP realisiert wurde.
Zum beispiel dieses Forum ist komplett unter nutzung von oop in PHP realisiert worden ansonsten währe es kaum noch weiter zu entwickeln...
 
also habe ich das richtig verstanden:

PHP:
<?php
  
  $var = true;

  function reference_test(&$var)
  {
  $var = false;
  }

  if(!$var)
    echo "hallo";
  else
    echo "auf wiedersehen";


?>

Gibt dann hallo aus?
 
Ich hatte eben schon angefangen ein tutorial über Klassen / OOP in PHP zu schreiben da hat der innere Schweinehund gesiegt und auch die Erkenntnis das mann nicht immer das Rad neu erfinden muss :)

Drum habe ich etwas gesucht und gefunden

tutorial PHP OOP 1
http://www.dynamic-webpages.de/50.tutorials.php?dwp_tutorialID=2&partNo=0

tutorial PHP OOP 2
http://www.dynamicwebpages.de/50.tutorials.php?dwp_tutorialID=12

PS:
Diese Tutorials beinhalten die neuerungen natürlich noch nicht ... aber da die neuerungen nur "hinzukommen" sind ist es auch weiterhin aktuell .
Und da bleibt dann für mich ja eventuell übrig ein weitergehendes über die neuerungen zu schreiben ;)
 
Original geschrieben von Bomber
also habe ich das richtig verstanden:

PHP:
<?php
  
  $var = true;

  function reference_test(&$var)
  {
  $var = false;
  }

  if(!$var)
    echo "hallo";
  else
    echo "auf wiedersehen";


?>


Gibt dann hallo aus?

Noch nicht du musst die Function erst aufrufen ;)

PHP:
<?php
  
  $var = true;

  function reference_test(&$var)
  {
  $var = false;
  }

  reference_test($var);

  if(!$var)
    echo "hallo";
  else
    echo "auf wiedersehen";


?>

gibt hallo aus ;)
 

Neue Beiträge

Zurück