Und warum PHP?

PHP ist eine Hybridsprache. Man kann mit Funktionen arbeiten oder objektorientiert programmieren.

Mein kleines   Portal ist komplett objektorientiert programmiert.

Ein Beispiel für ein   Kontaktformular nicht objektorientiert aber mit Funktionen wie " htmlspecialchars " gesichert.

Ein weiteres gutes Einsatzbeispiel sind die Teile der Website, die sich auf allen Seiten oder zumindest vielen, wiederholen. Wie z.B. das Menü, Teile des Headers oder ein Footer.

Hat man größere Projekte, sollte man überlegen, eventuell objektorientiert zu arbeitet.

Ein weiterer großer Vorteil von PHP ist die relativ einfache Anbindungsmöchkeit von Datenbanken.

PHP: OOP oder Prozeduren und Funktionen?

Was ist der Unterschied zwischen prozeduralem und objektorientiertem Programmieren?

In großen Projekten verliert man sehr schnell den Überblick über seine Variablen- und Prozedurbezeichnungen. Der Quellcode muß kopiert und angepaßt werden.

Hier kommt OOP zum Einsatz.

Eine gute Planung der Klassen im Vorfeld ist wichtig. Nur so sind spätere Änderungen möglich, ohne die gekapselte Funktionalität der Klasse zu beeinträchtigen.
Wenn man die Schnittstellen und das zu erwartende Ergebnis einer Klasse nicht verändert, kann man die Klasse ohne Probleme optimieren.
Durch den Einsatz von Objekten ist die Arbeit im Team einfacher. Die erstellten Klassen können von anderen Programmierern wiederverwendet werden. Die Entwickler müßen den Aufbau der Klasse nicht kennen. Sie müßen nur wissen, wie sie die Eigenschaften und Methoden der Klasse für ihre Zwecke einsetzen können.

Der Zugriff auf die Objektvariablen (Eigenschaften des Objektes) und die Prozeduren und Funktionen (Methoden des Objektes) erfolgt in der Anwendung per Objektnotation:

Objektname->Methode( ) oder Eigenschaft ;


Nachteil der der objektorientierten Programmierung:
Anwendungen die mit OOP entwickelt werden sind langsamer.

Fazit: Für kleinere Anwendungen ist es eventuell sinnvoller nicht mit OOP zu arbeiten.

Ist die Warscheinlichkeit hoch, dass das Projekt wächst, dann sollte man die Programmierung mit OOP durchführen.

Zum Anfang der Seite

PHP lernen - oop wichtige Punkte

  • Um eine Klasse verwenden zu können, muß sie zuerst definiert und später instanziiert (erstellt) werden.
    Die Definition erfolgt mit dem Schlüsselwort " class " :
    class zeitschrift { ... }
  • Die Eigenschaften werden als normale Variablen definiert:
    private $variable = ' PHP ' ;
    Variablen, welche als " private " definiert sind, können nur innerhalb der Methode geändert werden.
  • Eine Methode sieht in der Definition wie eine Funktion aus:
    public function lesen( ) ;
  • Instanziiert wird die Klasse mit:
    $php_zeitung = new zeitschrift ( ) ;
  • Der Zugriff auf die Eigenschaften und Methoden eines Objektes wird mit:
    Objektname->Methode ( ) oder Eigenschaft ;
    dargestellt. Ein Beispiel - Methodenaufruf aus unserer Klasse zeitschrift:
    echo $php_zeitung->lesen() ;
  • Methoden die Werte ändern nennt man üblicherweise wie die Eigenschaft, nur mit einem vorangestellten " get " oder " set ":
    public function setTitle ($title) { ... }
  • ... " this " ist innerhalb eines Objektes immer der Bezug auf das Objekt selbst
    $this->title = $title;
  • Ein Projekt enthällt in der Regel mehrere Klassen. Es entsteht eine Klassenhierarchie, in der die untergeordneten Klassen von ihrer Elternklasse erben.
    class Kindklasse extends Elternklasse { ... }
  • Wird in der erbenden Kindklasse eine Methode der Elternklasse definiert, ist die neue Definition in der Kindklasse gültig. Zugriffe auf Funktionen ... pardon, Methoden der Elternklasse sind mit dem Schlüsselwort parent möglich:
    echo parent::lesen() ;
  • Konstruktor und Destruktor:
    Die Konstruktor - Funktion wird immer beim Instanziieren des Objektes ausgeführt:
    public function __construct() { ... }
    Im Konstruktor sollte alles stehen, was von Anfang an definiert werden soll.
    Mit dem Destruktor löst man das Objekt auf:
    unset ($Objekt);

to be continued ...

Zum Anfang der Seite

Beispiel einer Klasse zeitschrift ( oop )

  1. <?php
  2. /**
  3. * Html-Teil mit Formular
  4. */
  5. <html>
  6. <body>
  7. <form action="<?php print htmlspecialchars($_SERVER['PHP_SELF']); ?>" method="get">
  8. <input type="text" name="titel" size="20" /> Buchtitel eingeben
  9. <input type="submit" name="submit" value="Versenden" />
  10. </form>
  11. </body>
  12. </html>
  13. /**
  14. * Beispiel einer Klasse zeitschrift
  15. */
  16.  
  17. class zeitschrift
  18. {
  19.   private $title;
  20.   public function setTitle($title)
  21.   {
  22.   /**
  23.   * Die Variable "$title" wird an die Methodenvariable
      "this->title" übergeben
  24.   */
  25.     $this->title = $title;
  26.   }
  27.  
  28.   public function getTitle()
  29.   {
  30.   /**
  31.   Die Ausgabe erfolgt entweder über return ... oder wie in
  32.   der Methode "lesen()" über "echo"
  33.   */
  34.   return $this->title = $title;
  35.   }
  36.  
  37.   public function lesen()
  38.   {
  39.   /**
  40.   Die Variable wird ausgegeben
  41.   */
  42.   echo $this->title;
  43.   }
  44. }// Ende der Klasse
  45.  
  46. /* Objekt bilden ( instanzieren ) */
  47. $php_zeitung = new zeitschrift();
  48.  
  49. /* Eingabe vom Formular übernehmen */
  50. $php_zeitung->setTitle($_GET['titel'] );
  51. /* Ausgabe der Formulareingabe */
  52. echo $php_zeitung->lesen() ;
  53. /* Ausgabe der Formulareingabe */
  54. echo $php_zeitung->getTitle() ;
  55. ?>

Skript speichern: zeitschrift

Zum Anfang der Seite

Beispiel für try catch objektorientiert ( oop )

  1. <?php
  2. /**
  3. * Beispielcode für Exceptions mit try ... catch
  4. */
  5.  
  6. class cAuto
  7. {
  8.   var $strFahrzeug;
  9.   var $intReifen;
  10.   function __construct()
  11.   {
  12.     $this->intReifen = 4; //Defaultwert setzen
  13.   }
  14.  
  15.   function setReifen($argIntReifen)
  16.   {
  17.     if (!is_int($argIntReifen))
  18.       throw new Exception('Wrong argument type: '. $argIntReifen.'. <b>int</b> required.');
  19.    
  20.     if (($argIntReifen !== 4) && ($argIntReifen !== 8))
  21.       throw new ReifenException('Falsche Anzahl Reifen. Es sollten 4 oder 8 sein.');
  22.      
  23.     $this->intReifen = $argIntReifen;
  24.   }
  25. }
  26.  
  27. class ReifenException extends Exception
  28. {
  29.   function __construct($strMessage)
  30.   {
  31.     parent::__construct($strMessage);
  32.   }
  33. }
  34.  
  35. $oMini = new cAuto();
  36.  
  37. try
  38. {
  39.   //$oMini->setReifen(5);
  40.   $oMini->setReifen(5);
  41. }
  42. catch (Exception $e)
  43. {
  44.   echo 'Allgemeiner Fehler: '.$e->getMessage();
  45. }
  46. catch (LegException $e)
  47. {
  48.   echo 'Logischer Fehler: '.$e->getMessage();
  49. }
  50. ?>

Skript speichern: try_catch

Zum Anfang der Seite

Formular mit Fehlerbehandlung - selbstreferenzierend (selbstaufrufend)

  1. <?php
  2. /**
  3. * Demo Formular mit Fehlerbehandlung -
  4. * selbstreferenzierend(selbstaufrufend)
  5. **/
  6. define('BRLF', "<br/>\n");
  7. $arrErrors = array();
  8.  
  9. if (count($_POST) > 0) {
  10.   $arrErrors = validateForm($_POST);
  11.   if (sizeof($arrErrors) > 0)
  12.   showForm($arrErrors, $_POST);
  13.   else
  14.   processForm($_POST);
  15. }
  16. else {
  17.   showForm($arrErrors, $_POST);
  18. }
  19.  
  20. function showForm($arrErrors, $arrPostedData)
  21. {
  22.   echo <<<STARTHTML
  23.   <html>
  24.   <head>
  25.   <meta http-equiv="Content-Language" content="en" />
  26.   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  27.   <title>Formular</title>
  28.   <style type="text/css">
  29.     .ok {margin:2px;}
  30.     .error {border:solid 2px red;
  31.         margin:4px;}
  32.   </style>
  33.   </head>
  34.   <body>
  35.   <h1>Kostenstelle</h1>
  36. STARTHTML;
  37.  
  38.   if (sizeof($arrErrors) > 0) {
  39.     echo 'Fehler in Eingabe:'.BRLF;
  40.   }
  41.   echo openForm($_SERVER['PHP_SELF'], 'POST');
  42.   echo inputText('Name', 'name', $arrPostedData['name'], $arrErrors).BRLF;
  43.   echo inputText('Vorname', 'vorname', $arrPostedData['vorname'], $arrErrors).BRLF;
  44.   echo inputText('Kostenstelle', 'kostenstelle', $arrPostedData['kostenstelle'], $arrErrors).BRLF;
  45.   echo submitForm();
  46.   echo closeForm();
  47.  
  48.   echo <<<ENDHTML
  49.   </body>
  50.   </html>
  51. ENDHTML;
  52. }
  53.  
  54. function inputText($strLabel, $strName, $strValue, $arrErrors) {
  55.   $strClass = 'ok';
  56.   $strError = '';
  57.   if (isset($arrErrors[$strName])){
  58.     $strClass = 'error';
  59.     $strError = ' ('.$arrErrors[$strName].')';
  60.   }
  61.   return "{$strLabel}: <input type='text' name='{$strName}' value='{$strValue}' class='{$strClass}' />{$strError}";
  62. }
  63.  
  64. function openForm($strAction, $strMethod) {
  65.   return "<form action='{$strAction}' method='{$strMethod}'>";
  66. }
  67.  
  68. function submitForm($strValue = 'Absenden') {
  69.   return "<input type='submit' value='{$strValue}'>";
  70. }
  71.  
  72. function closeForm() {
  73.   return '</form>';
  74. }
  75.  
  76. function validateForm($arrPostData) {
  77.   $arrErrors = array();
  78.   if (!isset($arrPostData['name']) || (strlen($arrPostData['name']) == 0)) {
  79.     $arrErrors['name'] = 'Kein Wert eingegeben.';
  80.   }
  81.   else {
  82.     // weitere Checks
  83.   }
  84.  
  85.   if (!isset($arrPostData['vorname']) || (strlen($arrPostData['vorname']) == 0)) {
  86.     $arrErrors['vorname'] = 'Kein Wert eingegeben.';
  87.   }
  88.   else {
  89.     // weitere Checks
  90.   }
  91.  
  92.   if (!isset($arrPostData['kostenstelle']) || strlen($arrPostData['kostenstelle']) == 0) {
  93.     $arrErrors['kostenstelle'] = 'Kein Wert eingegeben';
  94.   }
  95.   else {
  96.     if(is_numeric($arrPostData['kostenstelle'])
  97.     && ($arrPostData['kostenstelle'] > 0)
  98.     && ((int) $arrPostData['kostenstelle']) == $arrPostData['kostenstelle']) {
  99.       // Weitere Checks...
  100.     }
  101.     else
  102.       $arrErrors['kostenstelle'] = 'Falscher Wert. Muss ganze Zahl > 0 sein.';
  103.   }
  104.  
  105.   return $arrErrors;
  106. }
  107.  
  108. function processForm($arrPostedData) {
  109.   echo 'Vielen Dank für die Eingabe:'.BRLF;
  110.   echo 'Name: '.$arrPostedData['name'].BRLF;
  111.   echo 'Vorname: '.$arrPostedData['vorname'].BRLF;
  112.   echo 'Kostenstelle: '.$arrPostedData['kostenstelle'].BRLF;
  113.   // ...weiter verarbeiten
  114. }
  115. ?>

Skript speichern: Formular


Zum Anfang der Seite

Kontaktformular gesichert mit htmlspecialchars



Das   Script zum download in einem neuen Fenster dazu.



Wenn ihr diese Website gut findet unterstützt sie bitte, indem ihr folgenden Link in eure Website einfügt:


Vielen Dank !!!

Zum Anfang der Seite

Inhalt dieser Seite:

Etwas in eigener Sache.

Das VirtueMart-Buch zum beliebten Joomla-Shop


Vers. 1.1.9

    Vers. 2



Bei [ Amazon ] .

 

Hier der Text vom Verlag :

Millionen Websites laufen mit dem Content-Management-System Joomla! und das Shopsystem VirtueMart setzt auf Joomla! auf.
Der Riesenvorteil: Wer bereits eine Joomla!-Website betreibt, kann sie mit VirtueMart um einen Web-Shop erweitern.
Und wer nur eine zuverlässige und dabei kostenlose Shoplösung sucht, ist mit VirtueMart ebenfalls an der richtigen Adresse.
Der E-Commerce-Spezialist Goetz Nemeth zeigt in diesem Buch, wie Sie Ihren Shop mit VirtueMart einrichten, Produkte und die dazugehörigen Informationen einstellen, die Shopdaten bearbeiten, Zahlungsmethoden zur Verfügung stellen und vieles mehr.
Darüber hinaus demonstriert er, wie Sie den Shop mit der kostenlosen Warenwirtschaftslösung JTL-WaWi verknüpfen können.


(Falls Fehler in den Skripten sind, bitte mich informieren! Danke!)

  PHP und OOP

PHP lernen - OOP wichtige Punkte


  PHP Kontaktformular

Kontaktformular mit Fehlerbehandlung - selbstreferenzierend (selbstaufrufend)


  PHP Kontaktformular gesichert mit htmlspecialchars


  Fehler abfangen mit try catch

Beispiel für try catch



  PHP OOP eine Klasse

Beispiel einer Klasse "zeitschrift"


Social Bookmarks

Linkarena Oneview google yahoo del.icio.us Mr. Wong technorati Facebook