Kurzinfo PHP Programmierung

Winfried Mueller, www.reintechnisch.de, Start: 1.11.2003, Stand: 03.02.2005

(Dieses Dokument ist aus dem oberflächlichen Kontakt mit PHP entstanden, hauptsächlich als Kurzreferenz für mich.)

PHP ist eine vollwärtige Programmiersprache, die allerdings hauptsächlich im Zusammenhang mit Webdesign eingesetzt wird.

PHP ist in diesem Bereich vor allem deshalb so beliebt, weil die Sprache sehr einfach zu erlernen ist und weil es mächtige und umfangreiche Funktionsbibliotheken gibt, die alle möglichen Aufgaben für Webanwendungen abdecken. Auch ist die Sprache vorzüglich dokumentiert. Neben guter Online-Dokumentation gibt es jede Menge Bücher. Und es ist OpenSource.

Konzept dynamische Webseiten

Oft mischt man html-Seiten mit php-Code. Wird so eine Seite aufgerufen, sucht der Webserver (apache) alle Stellen, wo php-Code in der html-Seite ist. Dieser Code wird nicht wie der restliche html-Code direkt ausgeliefert. Vielmehr werden die php-Schnipsel als Programm dem php-Interpreter übergeben, dieser führt sie aus. Alle Ausgaben, die in diesem Programmcode gemacht werden, werden dann in die html-Seite eingesetzt. Die vollständige html-Seite, die ausgeliefert wird, setzt sich also zusammen aus den statischen html-Teilen und den Ausgaben von php-Programmstücken, die mehrfach im html-Dokument eingebettet sein können. Der Webbrowser beim Client sieht niemals auch nur eine Zeile php-Code.

Einbindung php-Code

In eine html Seite wird php-Code zwischen <? ... ?> Tags eingebaut.

Beispiel 1: phptest1.php: Ausgabe "Hello World!"

 

<html><head><title>Titel</title>
</head><body>
<h3>
<? echo "Hello World!" ?>
</h3>
</body></html>

Beispiel 2: phptest2.php: Ausgabe Infos zur php-Umgebung

 

<html><head><title>Titel</title>
</head><body>
<? echo phpinfo() ?>
</body></html>

Probiert es einfach mal aus. Quelltext in phptest1.php speichern, ins entsprechende Apache-Arbeitsverzeichnis speichern (debian: /var/www) und dann vom Browser aufrufen (http://host/phptest1.php).

Syntax

Die Syntax ähnelt sehr den Sprachen C, C++, Java, Perl.

Jede Anweisung wird mit einem Semikolon abgeschlossen (wie in C oder Perl)

 
<?
  echo "Text";
  echo "1234";
  echo "dkdk";
  echo "Text1"; echo "Text2"; echo "Text3";
?>

Das Semikolon ist für den Interpreter wichtig, damit er Anweisungen auseinanderhalten kann, die Zeilenschaltung ist nur für den Betrachter, damit es es besser lesen kann. Ebenso die Einzüge. Kurz gesagt: Der Interpreter filtert vor dem interpretieren alle Spaces, Tabs... (whitespaces) und Zeilenschaltungen heraus, sie sind für ihn unwichtig.

Konstanten

  • Es werden gewöhnlich Großbuchstaben verwendet.
  • Werden mit define() festgelegt: define( "SKONTO", "SKONTO = 0.03" )
  • Nach der Definition können sie nicht mehr verändert werden.

Variablen

  • Beginnen immer mit einem $-Zeichen: $var1, $Preis, $foo, $Bar
  • eine Variable kann alle Datentypen aufnehmen. Sie ist vom Typ des zuletzt zugewiesenen Objekts (string, numerisch...)
  • Mit der ersten Zuweisung fängt eine Variable an, zu existieren.
  • Variablen, die in Funktionen angelegt werden, sind lokal.
  • Möchte man in Funktionen auf globale Variablen zugreifen, schreibt man in der Funktion "global $varname". Auch lässt sich über "$GLOBALS["varname"]" drauf zugreifen.
  • Variablen werden per Value zugewiesen, es sei denn man verwendet den Operator & (z.B. $var1 = &$var2)

Datentypen

integer/intGanzzahlen
double/realFließkommanzahlen
stringZeichenketten
arrayArray
objectObjekte

Explizites Umwandeln von Datentypen

  • wie Typecasting unter C -> $var1 = (double) 123;
  • mit der Funktion settype -> settype( $Preis, "double" );

Arrays

  • Hinter einem Variablennamen wird ein Index angehängt: $Var[0], $Var[1]
  • Es ist nicht erforderlich, dass Array zuvor zu dimensionieren oder zu definieren. Zuweisung ist Definition, Dimensionierung erfolgt dynamisch.
  • Ein Array kann wie eine Variable beliebige Datentypen aufnehmen.
  • Mehrdimensionale Array sind auch möglich: $Var[0][0]

Zuweisung:

 
1. Durch absolute Angabe im Index:
  $Name[0] = "Peter";
  $Name[1] = "Herbert"; 
  $Name[2] = "Gerd";

2. Durch Zuweisung ohne Index, 
wird hinter letztes Element angehängt:
  $Name[] = "Peter";
  $Name[] = "Herbert";
  $Name[] = "Gerd";

3. Zuweisung über Array-Funktion:
  $Name = Array("Peter", "Herbert", "Gerd" );

Assoziative Arrays

  • In anderen Sprachen auch als Hash bekannt. Der Index kann ein beliebiger String sein.

Zuweisung:

 
1. Einfache Zuweisung:
  $fstab["device"]     = "/dev/hdc1";
  $fstab["mountpoint"] = "/home/test";
  $fstab["type"]       = "ext2";
2. Durch Array-Funktion mit speziellem Zuweisungsoperator:
  $fstab = array( "device"     => "/dev/hdc1";
                  "mountpoint" => "/home/test";
                  "type"       => "ext2"; );

  • mit extract( $fstab ) erzeugt man die Variablen $device, $mountpoint, $type, die mit $fstab["device"], $fstab["mountpoint"], $fstab["type"] gefüllt werden.

Operatoren

*Multiplikation
+Addition
-Subtraktion
/Division
%Modulus
==Vergleich
===Identisch
!=Ungleich
<Kleiner
>Größer
<=Kleiner Gleich
>=Größer Gleich
and, &&logisch UND
or, ||logisch ODER
xorlogisch XOR
!logisch Negation
.String Verknüpfung
.=String Verknüpfung mit Zuweisung
++Increment (var=var+1)
--Decrement (var=var-1)

Kontroll-Strukturen

if/else Statement
  • Aufbau wie in C/C++ oder Perl:
 
  if (Bedingung)
    Anweisung;

  oder

  if (Bedingung) {
    Anweisung;
    ...
    Anweisung;
  }

  oder 

  if (Bedingung) {
    Anweisung;
    ...
    Anweisung;
  } 
  else {
    Anweisung;
    ...
    Anweisung;
  }

  oder

  if ( Bedingung ) {
    Anweisung;
  }
  elsif ( Bedingung ) {
    Anweisung;
  }
  elsif ( Bedingung ) {
    Anweisung;
  }

Auch die C/Perl typische Kurzform

 Bedingung ? Anweisung-wahr : Anweisung-unwahr 

existiert.

switch/case-Struktur
  • genauso wie in C/C++:
  
  switch (Ausdruck ) {
    case Wert1:
      Anweisungen;
      break;
    case Wert2:
      Anweisungen;
      break;
    case Wert3:
      Anweisungen;
      break;
    default:
      Anweisungen;
      break;
  }

  1. Zuerst wird der Ausdruck ausgewertet
  2. Je nach Ergebnis wird zu einem passenden case verzweigt, ist kein passender vorhanden, wird auf default verzweigt.
  3. Die Anweisungen im case werden ausgeführt. Das break verhindert ein weiterlaufen durch die darunterliegenden case-Anweisungen. Typisch setzt man ein break, nur in wenigen Ausnahmefällen ist das weitere durchlaufen sinnvoll.
  4. Die Bearbeitung wird fortgesetzt mit Befehlen, die nach dem switch folgen.
Schleifen
 
  while ( Bedingung ) {
    Anweisungen;
  }

  do {
    Anweisungen;
  } while ( Bedingung )

  for ( Startwert; Bedingung; Schrittweite ) {
    Anweisungen;
  }

  //durchlaufe jedes Element des Arrays
  foreach ( Array as Element ) {
    Anweisungen;
  }

  • eine Schleife kann mit break abgebrochen und mit continue sofort erneut durchlaufen werden.

Funktionen

wird ergänzt...

Referenzen