PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [FRAGE/PROBLEM]Was ist bei meinem Code falsch?


Philipp
05.01.2002, 15:56
Hallo! Ich arbeite grad ein Buch durch und hier habe ich mal ein beispiel script gemacht...


<?php
class baseCalc
{
var $one = &quot;1&quot;;
var $two = &quot;2&quot;;

function calculate()
{
print &quot;$one -- $two<br>&quot;;
}
}
$out=new baseCalc;
$out->calculate();
?>


Bei mir im Browser werden nur die Zeichen &quot; -- &quot; angegeben, wo liegt der Fehler?

Es soll nur ein Beispiel sein, damit ich es auf andere Sachen besser anwenden kann, aber wenn das nicht mal funzt :[


Bauchi
05.01.2002, 15:59
das prob ist glaub ich, das der funktion die variablen $one & $two nicht bekannt sind...

du musst sie erst für die function registrieren ...

mach mal das:

function calculate()
{
global $one;
global $two;
print &quot;$one -- $two
&quot;;
}


dann sollten die variablen auch innerhalb der function gültig/bekannt sein :-)

Philipp
05.01.2002, 16:01
tja, das Prob, ist, dass ich noch nicht &acute;global&acute; hatte :) naja ich probiers, vllt. hat jemand noch nen andern Tipp für mich...

Aber ich hab das Problem gefunden, du hast mich auf den richtigen Weg gebracht!
<?php
class baseCalc
{
var $one = &quot;1&quot;;
var $two = &quot;2&quot;;

function calculate()
{

print &quot;$this->one -- $this->two<br>&quot;;
}
}
$out=new baseCalc;
$out->calculate();
?>


das mit den Objekten vergess ich ziemlich oft

print &quot;$this->one -- $this->two&quot;;

war, was fehlte! Danke!

Philipp
05.01.2002, 18:17
<?php
class baseCalc
{
var $one = 1;
var $two = 2;

function calculate()
{
print &quot;$this->one -- $this->two&quot;;
}
}
class addCalc extends baseCalc
{
var $one = 1;
var $two = 2;
var $three = &quot;$this->one + $this->two&quot;;
function calculate()
{
print &quot;$this->three&quot;;
}
}
$out=new addCalc;
$out->calculate();

?>


Ich habe das hier noch einmal etwas anders gemacht und wollt hören, was ich machen muss, damit die calculate() in addCalc $this->three(also 3) ausgibt, was stimmt nicht? Ich hoffe ich nerv nicht mit den fragen!

Bauchi
06.01.2002, 11:54
nur mal so als hintergrund frage...

warum programmierst du sowas mit classes ??

just 4 fun um&acute;s zu lernen oder ist das wirklich so gewollt :D

ich pers. kann mich nämlich an kein einziges mal erinnern, das ich klassen in php benutzt hab ...

Philipp
06.01.2002, 14:03
also es fördert das objektorientierte Programmieren, es wird zwar nicht oft angewandt, doch ich möchte trotzdem lernen es zu beherrschen, und es als einfach befehl mir variablen zu schreiben kann fast jeder, doch Klassen sind nicht allen besonders gut vertraut!

Bauchi
06.01.2002, 14:09
jo.. und wenn irgenwer jemals deine programm übernehmen muss (grade in firmen kommt sowas oft vor) und er erstmal 2 wochen braucht um den source zu checken...

dann freuen sich alle darüber das man diese tollen klassen verwendet hat, ohne die das zerlegen des programms wahrscheinlich nen tag gedauert hätte.. :evil:

bitte verzeihe mir den sarkasmus, aber ich bin in der beziehung ein gebranntes kind ...
wenn du mal software weiterentwickeln (neudeutsch aufbohren) musst von jemand anderem, dann bist du heilfroh wenn er/sie/es das programm vorher so simpel wie nur möglich gehalten hat ...

es gibt eine einfache regel... KISS .. Keep it small and simple ...

btw... münchen ist ne schöne stadt... wo genau wohnst du ? *G* $this->bauchi->forstenried ;-)

Philipp
06.01.2002, 15:05
erstmal geht es in dem Code nicht draum, dass ich es irgendwie verwenden will sondern es einigermaßen beherschen will und meine kleine Fehler rausfiltern möchte! Ich komme aus dem Osten von München, Perlach! Aber hat denn keiner eine Idee was da falsch ist? Ich war grad so opitmistisch weil das gar nicht so schlecht ist mit Objekten...

ubol
06.01.2002, 19:54
Versuch es mal so:


<?php
class baseCalc
{
var $one;
var $two;

function baseCalc()
{
$this->one = 1;
$this->two = 2;
}

function calculate()
{
print &quot;$this->one -- $this->two&quot;;
}
}
class addCalc extends baseCalc
{
var $one = 1;
var $two = 2;
var $three = &quot;$this->one + $this->two&quot;;
function calculate()
{
print &quot;$this->three&quot;;
}
}
$out=new addCalc;
$out->calculate();

?>


Klassen sind etwas speziell im Umgang mit Variablen. Nicht nur, dass Variablen per $this->[variablen-name] aufgerufen werden, sondern auch in der Definition.

Wenn du am Anfang einer Klasse eine Variable definierst, dann nur ihren Namen ! und nicht den Wert.

Für dein Skript heisst das nun folgendes:
Am Anfang der Klasse definierst du alle Variablen, die von der Klasse benötigt werden. Um diesen Variablen dann einen konstanten Wert zuzuordnen, benutzt du eine Funktion. Am einfachsten ist die Lösung mit einer Funktion, die den gleichen Namen trägt wie die Klasse.

Wichtiger Hinweis:
Bei jeder Initialisierung einer Klasse wird automatisch auch die Funktion mit dem Klassen-Namen aufgerufen!

D.h. in deinem Beispiel:
1. Definiere die Variablen einer Klasse (nur die Namen!)
2. Schreibe eine Funktion innerhalb der Klasse mit dem gleichen Namen wie die Klasse (Achte auf Gross- und Kleinschreibung. Innerhalb dieser Funktion weisst du allen definierten Variablen den gewünschten Wert zu.

Das ist schon alles. Denn mit dem Befehl:
$variable = new ClassName();
wird auch gleich den Variablen die richtigen Werte zugeweisen.

Hinweis:
Auch bei der Klassenfunktion (Funktion mit dem Namen der Klasse) kannst du Variablen übergeben!
Beispiel:

class test
{
var zahl1;
var zahl2;

function test(var1, var2)
{
$this->zahl1 = $var1;
$this->zahl2 = $var2;
}

function out();
{
return ($this->zahl1+$this->zahl2);
}
}

So kannst du dein Skript (ohne Klasse) auf folgenden Text kürzen:

$klasse = new test(1,2);
echo $klasse->out;

Was passiert:
Mit der 1. Zeile wird der Variable &quot;klasse&quot; die Klasse &quot;test&quot; zugewiesen. Ausserdem werden automatisch die Klassenvariablen definiert und mit den richtigen Werten ergänzt (Übergabe erfolgt durch die Parameter im Klassenaufruf)
Mit der 2. Zeile wird der Rückgabewert der Funktion &quot;out&quot; ausgegeben (Summe der beiden Variablen)


Hope that helps :]

Urs Boller

Philipp
06.01.2002, 20:14
WoW! danke mit so einer tollen Antwort hätte ich nicht gerechnet...und wie du es erklärt hast, dass ich die variablen in einer function definieren soll, hat mir schon mal weiter geholfen! Echt klasse!