Simple Verberbung in PHP

Diskutiere Simple Verberbung in PHP im Web & Grafik Forum im Bereich Internet & Telekomunikation Forum; Hi, ich hab ein kleineres Problem mit Vererben in PHP. Vielleicht könnt ihr mir kurz weiter helfen. Ich habe ne Basisklasse z.b. Car: class Car...
  • Simple Verberbung in PHP Beitrag #1
P

Plautzer

Bekanntes Mitglied
Dabei seit
03.09.2001
Beiträge
613
Reaktionspunkte
0
Ort
Sachsen
Hi,

ich hab ein kleineres Problem mit Vererben in PHP. Vielleicht könnt ihr mir kurz weiter helfen.

Ich habe ne Basisklasse z.b. Car:

Code:
class Car
{
    protected $tireCount;
    protected $speed;


    public function setSpeed($newSpeed)
    {
        $this->speed = $newSpeed;

        return $this;
    }

    public function getSpeed()
    {
        return $this->speed;
    }
}


und eine Childklasse, die von Car erbt

Code:
class VW extends Car
{
    protected $engine = "150 PS";
}

ich möchte nun in der Klasse Car die Variable Speed festlegen und in der KLasse VW verwenden:

Code:
$car = new Car;
$car->setSpeed(6);
echo $car->speed;

$vw = new VW;
echo $vw->Speed;

Bei ersten echo wird die variable ausgegeben beim zweiten nicht. Weiss jemand von euch warum?

Grüße
Plautzer
 
  • Simple Verberbung in PHP Beitrag #2
FerFemNemBem

FerFemNemBem

Moderator
Teammitglied
Dabei seit
11.09.1999
Beiträge
4.494
Reaktionspunkte
0
Halloechen,

weil Du dort "Speed" gross geschrieben hast?

Grussm FFNB.
 
  • Simple Verberbung in PHP Beitrag #3
P

Plautzer

Bekanntes Mitglied
Dabei seit
03.09.2001
Beiträge
613
Reaktionspunkte
0
Ort
Sachsen
das ist ein Rechtschreibfehler... ändert aber nicht am ergebnis.

erst wenn ich $speed direkt in der klasse defniere steht der wert in der childklasse zur verfügung:
protected $speed = 12;
 
  • Simple Verberbung in PHP Beitrag #4
willikufalt

willikufalt

Bekanntes Mitglied
Dabei seit
28.08.2001
Beiträge
1.481
Reaktionspunkte
0
Du definierst deine Member als protected und versuchst dann von ausserhalb direkt darauf zuzugreifen.

Dazu benutzt man aber die dafür definierten Methoden.
(Hier setSpeed und getSpeed.)

Code:
$car = new Car;
$car->setSpeed(67);
echo "Auto: {$car->getSpeed()}<br>";

$vw = new VW;
$vw->setSpeed(105);
echo "VW: {$vw->getSpeed()}<br>";
 
  • Simple Verberbung in PHP Beitrag #5
P

Plautzer

Bekanntes Mitglied
Dabei seit
03.09.2001
Beiträge
613
Reaktionspunkte
0
Ort
Sachsen
das mit der Anzeige sollte nur ein Beispiel sein.

Meine intention ist den $speed einmal in der class car zu definieren und diesen dann in alle childklasse zu verwenden... und z.b. eine Berechnung durchzuführen

Abstraktes Beispiel:

Parent Class{
$a;
$b;

function define(){
$a = 1;
$b = 2;
}

}
child class extends parent class{

$c;

function define(){
$c = 56;
}


function berechne(){
return $this->a+$this->b;
}

}




Wenn ich nun das setSpeed beim child weglasse funktioniert getspeed ebenfalls nicht:

$car = new Car;
$car->setSpeed(67);
echo "Auto: {$car->getSpeed()}<br>";

$vw = new VW;
echo "VW: {$vw->getSpeed()}<br>";
 
  • Simple Verberbung in PHP Beitrag #6
willikufalt

willikufalt

Bekanntes Mitglied
Dabei seit
28.08.2001
Beiträge
1.481
Reaktionspunkte
0
Hi !

Wie jetzt?

Du willst, dass alle Instanzen deiner Klasse zu Beginn mit einem bestimmten Wert für "speed" initialisiert werden?

Das könntest du z.B. in einen Konstruktor schreiben.
 
  • Simple Verberbung in PHP Beitrag #7
P

Plautzer

Bekanntes Mitglied
Dabei seit
03.09.2001
Beiträge
613
Reaktionspunkte
0
Ort
Sachsen
richtig... der wert wird einmal in der parent class für alle child klassen definiiert.

Das hatte ich auch schon probiert. Das Problem dabei ist jedoch, dass der Contructor bei Parent Class auch beim erstellen der Child klasse aufgerufen wird und ich somit die Variablen auch bei der chidlklasse übergeben muss oder es wird alles auf NULL gesetzt.

class Car
{
public $tireCount = 4;
public $speed;


public function __construct($var){

$this->speed =$var;

return $this;
}
}

$car = new Car(12);
echo "Auto: {$car->getSpeed()}<br>"; # ergebnis = 12


$vw = new VW;
echo "VW: {$vw->getSpeeds()}<br>"; # kein ergebnis

$vw = new VW(2);
echo "VW: {$vw->getSpeeds()}<br>"; # ergebnis = 2
 
  • Simple Verberbung in PHP Beitrag #8
willikufalt

willikufalt

Bekanntes Mitglied
Dabei seit
28.08.2001
Beiträge
1.481
Reaktionspunkte
0
$vw = new VW;
echo "VW: {$vw->getSpeeds()}<br>"; # kein ergebnis
Du meinst, der Speed wird hier auf Null gesetzt?

Das ist natürlich mitnichten der Fall.
Vielmehr hast du doch eine völlig neue Instanz deiner Klasse erzeugt, in der selbstverständlich noch gar kein Wert für speed definiert wurde.

Ich glaube, dir sind die grundsätzlichen Bedeutungen von Klassen, Objekten und Instanzen noch nicht so richtig klar.
Oder ich habe dich kompett missverstanden.

Auf jeden Fall verhält sich dein Code eigentlich genau so, wie er es auch tun sollte.
 
  • Simple Verberbung in PHP Beitrag #9
P

Plautzer

Bekanntes Mitglied
Dabei seit
03.09.2001
Beiträge
613
Reaktionspunkte
0
Ort
Sachsen
Ich glaube, dir sind die grundsätzlichen Bedeutungen von Klassen, Objekten und Instanzen noch nicht so richtig klar.
Oder ich habe dich kompett missverstanden.

Gut möglich das ich das noch nicht komplett verinnerlicht habe.

Ich gehe davon aus, dass ich eine Allgemeine Klasse habe in der ich generelle Variablen und Funktionen definiere und davon spezialisierte klassen (child classes) ableite, die gleichzeitig die allgemeinen definierten Daten der parentklasse verarbeiten kann.

Ich war mir nicht im Klaren, dass beim Instanziieren der Child-Klasse die Parent-Klasse ebenfalls nochmal instanziiert wird... was in manchen fällen sogar mehr sinn macht ;) Ich benötige jedoch genau die lösung -> einmal parent definieren und die childs ableiten. Anschließend will ich sowohl mit der parent als auch mit der child weiterarbeiten.
 
  • Simple Verberbung in PHP Beitrag #10
willikufalt

willikufalt

Bekanntes Mitglied
Dabei seit
28.08.2001
Beiträge
1.481
Reaktionspunkte
0
Doppelpost
 
Zuletzt bearbeitet:
  • Simple Verberbung in PHP Beitrag #11
willikufalt

willikufalt

Bekanntes Mitglied
Dabei seit
28.08.2001
Beiträge
1.481
Reaktionspunkte
0
Tja, da musst du dich wohl doch nochmal mit den Grundlagen beschäftigen.

Ich weiss nicht, ob dir das weiterhilft, aber was du z.B. machen könntest, ist folgendes:

Code:
<?php

class Car
{
    protected $tireCount;
    protected $speed;


    public function setSpeed($newSpeed)
    {
        $this->speed = $newSpeed;
        return $this;
    echo "setSpeed";
    }

    public function getSpeed()
    {
        return $this->speed;
    echo "getSpeed";
    }

    function __construct($var)
    {
    $this->speed=$var;
    echo "Hallo<br>";
    }

}

class VW extends Car
{
    function __construct($var=34)
    {
      parent::__construct($var);
    }
}
Damit gibst du für $var den Defaultwert 34 vor.
Erzeugst du nun eine Instanz der Klasse VW durch

VW1 = new VW(100), wird der Speed auf 100 gesetzt.
VW2 = new VW(), wird der Speed auf 34 gesetzt.
 
  • Simple Verberbung in PHP Beitrag #12
cmddegi

cmddegi

Bekanntes Mitglied
Dabei seit
12.07.2001
Beiträge
4.740
Reaktionspunkte
0
Ort
Austria
Ich habe jetzt nicht alle Posts gelesen, aber das Verhalten ist genau korrekt so. Du musst strikt unterscheiden zwischen Klassen und Objekten/Instanzen von Klassen. Du erzeugst in deinem ersten Beispiel ein Objekt der Klasse car, setzt eine Variable in diesem Objekt(!) und erzeugst dann ein neues Objekt einer abgeleiteten Klasse. Das sind aber zwei völlig verschiedene Objekte, wie zwei verschiedene Variablen.
Eine Klasse ist im Prinzip sowas wie ein Datentyp, während ein Objekt einer Variable dieses Typs entspricht.
Es gibt allerdings in objektorientierten Programmiersprachen die Möglichkeit, in Klassen Funktionen und Variablen zu erstellen, auf die ohne ein Objekt zugegriffen werden kann. Bei PHP bin ich mir nicht sicher, aber ich denke das Schlüsselwort dafür ist static; in manchen Programmiersprachen heißt es auch shared. Das entspricht dann im Prinzip einer globalen Variablen, auf die man von überall (oder nur von Objekten der Klasse, usw.) zugreifen kann.
 
Thema:

Simple Verberbung in PHP

ANGEBOTE & SPONSOREN

https://www.mofapower.de/

Statistik des Forums

Themen
213.180
Beiträge
1.579.173
Mitglieder
55.879
Neuestes Mitglied
stonetreck
Oben