Antworten auf deine Fragen:
Neues Thema erstellen

Eine kleine frage zu "class"

S

SGLog

Guest

Hallo,

ich habe mich seit einigen tagen wieder stark mit php beschäftigt und bin jetzt dabei mit "class" und "function" umzugehen.
Dabei bin ich aber auf etwas gestoßen was ich nicht ganz nachvollziehen kann. Im folgendem PHP-Code steht gleich in der 3 Zeile "var $radius=2" kann mir einer erklären warum es da steht und was es bewirkt?
Wenn ich die 3 Zeile auskommentiere funktioniert das Script auch und das auch Richtig. Deshalb tut mich das verwirren!

Die Eigentliche Funktion des hier aufgeführeten PHP-Codes haben ich verstanden. ;)

PHP:
class Kreis
{
    var $radius=2;

    function Kreis($radius)
    {
        $this->radius=$radius;
    }

    function flaeche()
    {
        return pow($this->radius,2)*pi();
    }

    function umfang()
    {
        return pi()*$this->radius;
    }
}

$rechnen = new Kreis(20);
echo $rechnen->flaeche();
echo $rechnen->umfang();
 

AW: Eine kleine frage zu "class"

$radius ist eine Property / Eigenschaft der Klasse Kreis. (Feld oder Member sind auch noch gängige Bezeichnungen) Alle Methoden der Klasse können auf diese Properties zugreifen ($this->radius).

Anhand deines Beispiels würde ich sagen, du arbeitest mit PHP4 - da ist objektorientiertes Programmieren nur bedingt möglich / sinnvoll, da zum Beispiel keine Zugriffsmodifizierer existieren und somit alles immer öffentlich erreichbar (public) ist.

In PHP5 sollte man sich angewöhnen, das alles etwas "eleganter" zu lösen.

$radius ist hier standardmäßig mit dem Wert 2 vorbelegt. Damit könnten die Funktionen auch ohne übergebenen Wert aufgerufen werden ohne Fehler zu produzieren. Wenn du die Property auskommentierst, wird über den Konstruktor (function Kreis) die Variable angelegt.
 
Zuletzt bearbeitet:
AW: Eine kleine frage zu "class"

Ok danke für die schnelle und detailierte antowrt.
Aber...
ich habe das so verstanden das die "class" Klasse auch funktioniert wenn ich keine Zahl setzte (radius), dieser ist im solch einen Fall dann 2. oder?

Nur wenn ich das so machen gibt er mir einen Fehler aus:

Warning: Missing argument 1 for Kreis::__construct(), called in D:\webhosting\xampp\htdocs\php\class.php on line 24 and defined in D:\webhosting\xampp\htdocs\php\class.php on line 7
00
Hier der PHP-Code:

PHP:
class Kreis
{
    var $radius = 2;

    function __construct($radius)
    //function Kreis($radius)
    {
        $this->radius=$radius;
    }

    function flaeche()
    {
        return pow($this->radius,2)*pi();
    }

    function umfang()
    {
        return pi()*$this->radius;
    }
}

$rechnen = new Kreis(); // Zeile 24
echo $rechnen->flaeche();
echo $rechnen->umfang();
Und zu dem php4, stimmt nicht ganz ;) also ich lerne gerade PHP 5.3 aber ich wollte das mit public erstmal weg lassen. Schritt für Schritt ^^

PHP:
    function __construct($radius)
    //function Kreis($radius)
Diese beiden Befehle sind oben auch wieder zu finden was unterscheitet diese?
 
AW: Eine kleine frage zu "class"

Parameter:

Sie würde ohne Parameter $radius funktionieren, was aber nur wenig Sinn macht, es sei denn der wäre immer 2. ;)

Wenn du $radius bei der Erstellung der Klasse weglassen willst, dann müsste auch für den Konstruktor der Parameter raus oder ein Standardwert dort vorgegeben werden, ansonsten erhälst du die Fehlermeldung von dir.


PHP4:

Naja die Codeschreibweise deutet auf PHP4 hin, damals ging das nicht anders. Aus Gründen der Abwärtskompatibilität funktioniert das auch heute noch. PHP5 interpretiert function ohne Zugriffsmodifizierer bzw. var einfach immer als public.

Konstruktor:

Beide Schreibweisen sind gültig und der sog. Konstruktor für die Klasse. __construct ist heutzutage vorzuziehen, wird aber von PHP4 nicht erkannt.

Lies' dich am besten bissel in die Materie OOP (+PHP5) ein, so schwer ist das nicht. :)
 
AW: Eine kleine frage zu "class"

Danke.

Habe ein Buch PHP 5.3 in diesem das Kapitel class usw. gelesen.
Nur das hier vorliegende script ist aus dem Internet kann sein das das hier PHP4 ist.
Aber werde mich noch zum 5.3 hocharbeiten bis ich weiter mache :) , mit anderen.

Aktuelles Script:
PHP:
<?php

class Kreis
{
    public function __construct($radius)
    {
        $this->radius=$radius;
    }

    public function flaeche()
    {
        return pow($this->radius,2)*pi();
    }

    public function umfang()
    {
        return pi()*$this->radius;
    }
}

$rechnen = new Kreis(17);
echo $rechnen->flaeche();
echo $rechnen->umfang();

?>
 
AW: Eine kleine frage zu "class"

Dein erstes Skript ist OOP in der Version php4. Das letzte ist OOP in der Version php5.

Das kann man zum einen am Konstruktor sehen. In PHP4 mußte der Konstruktor wie die Klasse heißen ( function Kreis() ) in PHP5 wird er durch __construct ( function __construct() ) aufgerufen. Zudem gab es in PHP4 noch keine Zugriffmodifikatoren (public, privat etc.). Salopp gesagt war OOP in PHP4 eine ziemlich gute Arrayprogrammierung. In PHP5 wird das wesentlich besser unterstützt. Aber auch in PHP4 gab es schon respektable Anwendungen in OOP. Am besten konzentrierst Du Dich auf OOP in PHP5.
 
AW: Eine kleine frage zu "class"

Das is immer der Spagat beim programmieren lernen, entweder lernt man's ordentlich aber praxisfern und verliert die Motivation, oder man lernt sehr viel Müll, den es dann wieder irgendwann auszubügeln gilt, kann dafür aber direkt mehr oder weniger nützliche Programme schreiben. ;)
 
AW: Eine kleine frage zu "class"

Naja ich programmiere ja in einer Gruppe und noch lerne ich und schreibe nur kleine scripte die ich auch kann :)

gelernt:

PHP:
<?php 
class Fahrzeug{ 
     
    //Attribute 
    public $gestartet=false; 
    protected $aktuelleGeschwindigkeit=0; 
    private $hoechstGeschwindigkeit=0;     
     
    function __construct($maxV=180){ 
         
        $this->setHoechstGeschwindigkeit($maxV);     
         
    } 
     
    public function starteMotor(){ 
         
        $this->gestartet = true; 
             
    } 
     
    public function stoppeMotor(){ 
         
        $this->gestartet = false; 
                 
    }     
     
    public function beschleunige($neuV){ 
         
        if($this->gestartet){ 
            $this->aktuelleGeschwindigkeit = ($neuV<=$this->hoechstGeschwindigkeit)?$neuV:$this->hoechstGeschwindigkeit;     
        } 
    } 
     
    public function bremse($neuV){ 
         
        Bremse::greifen();         
        $this->aktuelleGeschwindigkeit = ($neuV <= $this->aktuelleGeschwindigkeit)?$neuV:$this->aktuelleGeschwindigkeit;     
         
    } 
     
    protected function setHoechstGeschwindigkeit($neuV){ 
         
        $this->hoechstGeschwindigkeit = $neuV; 

    } 
     
    public function getHoechstGeschwindigkeit(){ 
     
        return $this->hoechstGeschwindigkeit; 
     
    }     
     
    public function getAktuelleGeschwindigkeit(){ 
     
        return $this->aktuelleGeschwindigkeit; 
     
    } 
         
} 

class Bremse{ 
     
    public function greifen(){ 
     
        echo "ich greife";     
         
    } 
     
} 

//Instanz der Klasse erzeugen 
$lkw = new Fahrzeug(500,75); 

$lkw->starteMotor(); 
echo($lkw->gestartet)?'an':'aus'; 
$lkw->beschleunige(100); 
?>
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
119.003
Beiträge
1.540.318
Mitglieder
68.238
Neuestes Mitglied
Martin_78XYZ
Oben