Sven Rautenberg: Klassen

Beitrag lesen

Moin!

ich habe mal eine Frage zu Klassen.

Dir fehlt noch die Erfahrung im objektorientierten Programmieren. Das sieht man insbesondere deinem Code an.

Wichtigster Punkt überhaupt: Nutze PHP 5! Version 4 ist seit letztem Jahr tot, und hat außerdem kein wirklich nutzbares OOP - oder anders formuliert: Wenn man sich erstmal an die Möglichkeiten von PHP 5 gewöhnt hat, ist PHP 4 einfach nur noch ein Krampf.

Habe zum Test mal folgenden Code erstellt:

An dem gibts viel zu kritisieren.

<?php
class lib {
var $faktor   = "";

In PHP 5 wird den Eigenschaften von Objekten eine Sichtbarkeit zugewiesen: public, protected oder private. Das Schlüsselwort "var" ist veraltet und wird (noch) als Alternative zu "public" ausgewertet.

Dasselbe gilt auch für alle Methoden des Objekts: Immer die Sichtbarkeit mit angeben. Fehlt die Angabe, ist die Methode public.

function bar(){
global $lib;

Globale Variablen sind ganz ganz übel! Sowas sollte man unbedingt vermeiden!

Wenn es darum geht, innerhalb einer Methode auf Methoden oder Eigenschaften desselben Objekts zuzugreifen, in dem man sich gerade befindet, benutzt man die Variable $this.

  echo "Hallo ";  
  echo $lib->faktor;  

echo $this->faktor;

}

function foo(){
global $lib;

Globale Variablen sind übel... siehe oben,

  $lib->faktor = 500;  
  $lib->bar();  

$this->faktor = 500;
$this->bar();

}
}
$lib = new lib;
$lib->faktor = $faktor;

Naja, sicherlich optimierungsfähig. Die Frage ist, was du damit erreichen willst.

Wenn das Objekt bei seiner Instanziierung direkt Werte mit auf den Weg bekommen soll, dann erstelle in der Klasse eine Funktion mit dem Namen "__construct" (das sind zwei Unterstriche im Namen) und entsprechender Parameterliste:

public function __construct($faktor) {
  $this->faktor = $faktor;
}

Instanziierung dann mit:
$lib = new lib(1234);

oder
$lib = new lib($irgendeinevariable);

und eine index.php:
<?php
require "functions.php";
$lib->foo();
?>

Rein vom Logikablauf würde man die Skripte so nicht verschachteln. Das Require sollte nur die Klassendefinition laden, alle Objekte sollten im Hauptskript angelegt werden.

Das funktioniert soweit ganz gut. Ich möchte damit bestimmte Variablen weitergeben, aber nicht über ein Formular als Hidden oder in einer Addresszeile.

Nutze Sessions. Das hat mit Klassen gar nichts zu tun.

Du darfst natürlich Klassen benutzen, um den Zugriff auf das Session-Array zu regeln, aber das ist nicht notwendig - und für Anfänger wie dich vermutlich auch noch eine Nummer zu groß. Ich würde kleiner anfangen.

- Sven Rautenberg