PHP-Kurs 12. Teil
12. Objektorientierte Programmierung
 pk-Applets 
 PHP-Kurs 

 
 

12. Objektorientierte Programmierung

PHP bietet auch Möglichkeiten zur objektorientierten Programmierung.
Dies empfiehlt sich an bei komplexen Datenstrukturen.

Wir betrachten als Beispiel die Klasse bruch.
Als Daten haben wir somit $zaehler und $nenner.

Aus Methoden wollen wir zunächst einführen:
function ausgabe()   gibt den Bruch am Browser aus!
function add(  bruch $b ) zum Bruch wird der Bruch $b addiert.

Beachte, dass die Daten und die Methoden einer Klasse stets über das Zeigersymbol -> angesprochen werden.
In der Implementierung der Klassenmethoden geschieht dies mit $this-> !!

Die Bruckklasse wird in der Include-Datei  listing-12a.inc  definiert.
listing-12a.inc
<?
//**** listing-12a.inc ***********************************
//**** Klasse bruch **************************************

function ggt( $a , $b )
  {        //*** Ermittelt den ggT zweier Zahlen ******
  $min = min( abs($a) , abs($b) ) ;
  while( $min>1 )
     {
     if( ($a%$min == 0) && ($b%$min == 0) )  return $min ;
     $min-- ;
     }
  return 1 ;
  }


//**** Die Klasse bruch ***************************************
class bruch
  {
  var $zaehler ;
  var  $nenner ;
 
 
  function bruch( $z , $n )
     {        //**** Konstruktor **************************
     $this->zaehler = $z ;
     $this->nenner = $n;
     }
 
  function ausgabe()
     {
     echo $this->zaehler."<BR>------------<BR>".$this->nenner."<BR>" ;
     }
    
  function add( $b  )
      {        //**** Zum Bruch also zur Instanz dieser Klasse ***
              //**** wird der Bruch b addiert *******************
      $tz = $this->zaehler ;
      $tn = $this->nenner ;
      
      $tz = $tz*$b->nenner + $b->zaehler*$tn ;
      $tn *= $b->nenner ;
     
      $kuerze = ggt( $tz , $tn ) ;
     
      $this->zaehler = $tz / $kuerze ;
      $this->nenner  = $tn / $kuerze ; ;
      }
  }  
?>

Zusätzlich enthält listing-12a.inc
die Funktion ggt( $a , $b ), die den größten gemeinsamen Teiler ermittelt.
( Der euklidische Algorithmus ist dem Author bekannt! )
 
  Zum Test:
  listing-12a.php
<?
require( "listing-12a.inc" ) ;

echo "<BR>Erster Bruch:<Br>" ;
$b1 = new bruch( 1 , 12 )  ;
//*** $b1->zaehler = -1 ;
$b1->ausgabe() ;

echo "<BR>Zweiter Bruch:<Br>" ;
$b2 = new bruch( 5 , 12 )  ;
$b2->ausgabe() ;

echo "<BR>Summe:<Br>" ;
$b1->add( $b2 ) ;
$b1->ausgabe() ;
?>
Teste die Zeile $b1->zaehler = -1 ;
Sie zeigt, dass es mit dem Schutz von Daten einer Klasse hier nicht weit her ist!

Aufgabe
Ergänze die Klasse Bruch durch Methoden der anderen Rechnungsarten!
In ein HTML-Formular sollen zwei Brüche eingegeben werden, die dann
addiert, subtrahiert oder dividiert werden.
Eine Lösung ist in den listings 12b !