Webstatt.org - Community seit 2006 - 2012 (2024?)

OOP vererbung

Avatar user-287
09.07.2006 15:47

Hallo,
also ich habe eine Klasse in der alles abläuft und eine riesen funktion so um die 2000 Zeilen. Nun will ich aber nicht diese riesen Funktion in meiner Klasse haben, wegen der übersichtlichkeit. Diese Funktion braucht aber auch variablen aus der Klasse.

Includen kann man die Funktion ja nicht so einfach in die Klasse. Kann man da irgendwie was vererben oder wie läuft das ab. Hab in meinen Büchern und im Internet nichts gefunden. Hoffe ihr versteht mein Problem.

Avatar user-255
09.07.2006 15:55

Die Methode an sich kannst du nicht einbinden, sehr wohl aber den Funktionskörper lächeln
<?php
class A {
function A() {
require 'A_A.php';
}
}
?>

Those who can, do. Those who can't, teach. # Musik gehört dem Volk! # last.fm
Avatar user-287
09.07.2006 16:01

Original von user-255
Die Methode an sich kannst du nicht einbinden, sehr wohl aber den Funktionskörper lächeln
<?php
class A {
function A() {
require 'A_A.php';
}
}
?>


jo ok wird auch gehen, aber ne funktion in ner funktion geht nicht oder?

Avatar user-255
09.07.2006 16:17

> ne funktion in ner funktion geht nicht oder?

Geht schon, ist aber nicht besonder schön. user-158n doch lieber OOP zwinkern

Those who can, do. Those who can't, teach. # Musik gehört dem Volk! # last.fm
Avatar user-253
09.07.2006 16:18

rafft PHP, dass die Funktion jedes mal neu definiert wird? Ich dachte immer wenn man die Funktion dann zweimail aufrufen würde, gäbe es einen Error (function already exists)

Avatar user-255
09.07.2006 16:24

Fatal error: Cannot redeclare asdf() ...

Böser Garbage Collector..!

Naja, musst wohl oder übel eine eigene Klasse aus deiner Funktion machen.

Those who can, do. Those who can't, teach. # Musik gehört dem Volk! # last.fm
Avatar user-287
09.07.2006 17:32

Original von user-255
Fatal error: Cannot redeclare asdf() ...

Böser Garbage Collector..!

Naja, musst wohl oder übel eine eigene Klasse aus deiner Funktion machen.


jo, das problem ist, dass man die datei nur 1mal includen kann, nicht mehrfach, dann kommt der Fehler.

Aber wie mach ich das mit einer neuen klasse, dass war ja meine Frage

Avatar user-255
09.07.2006 17:37

> jo, das problem ist, dass man die datei nur 1mal includen kann, nicht mehrfach, dann kommt der Fehler.

Dann wäre require_once() angesagt.

> Aber wie mach ich das mit einer neuen klasse, dass war ja meine Frage

So:
<?php
class A {
function fkt() {
// hier die ominöse megafunktion.
$this->helfer();
}
function helfer() {
// hier die hilfsfunktion
}
}

class B {
var $A;
function B {
// klasse A "laden"
$this->A = new A();
$this->A->fkt();
}
}

new B();
?>

Those who can, do. Those who can't, teach. # Musik gehört dem Volk! # last.fm
Avatar user-287
09.07.2006 18:15

aja, so hab ich mir das schon fast gedacht, dass probier ich mal so morgen aus.
Danke

Avatar user-287
10.07.2006 14:07

Danke, es geht und sieht so schöner aus.

Avatar user-168
10.07.2006 14:18

2000 Zeilen? Darf ich mal fragen, was das für ne Funktion ist? Kann mir gar nicht vorstellen, dass sowas noch vernünftig auf nem Webserver läuft. Fettes Grinsen

Dustwolf ------------------------- Und wenn du lange in einen Abgrund blickst, blickt der Abgrund auch in dich hinein. F. Nietzsche
Avatar user-253
10.07.2006 14:26

So riesig sollte eine Funktion auch einfach nicht werden. Selbst 200 Zeilen sind schon sehr sehr viel...

Avatar user-287
10.07.2006 14:41

Original von user-251el
So riesig sollte eine Funktion auch einfach nicht werden. Selbst 200 Zeilen sind schon sehr sehr viel...


Jo, ist von einem Poker spiel, geht alle möglichen Kartenblätter mit einer if abfrage durch um zu gucken, was man für Karten hat.
Anders kann man das glaub ich nicht lösen.

Avatar user-253
10.07.2006 15:04

Ich denke es gibt immer andere Möglichkeiten. Genauso weiß ich aber, dass man sich programmiertechnisch weiterentwickelt und nie zum Ende kommt wenn man alte Sachen immer anpassen will.

Du könntest beispielsweise jede Karte als ein Objekt machen - was sich in einem OOP Ansatz eh anbietet - und ihm eine Methode getType oder Ähnliches geben. user-158n einfach mit foreach über die Karten iterieren und Zähler aktualisieren.

Avatar user-168
10.07.2006 15:09

Jo, dann legst du quasi ein Array mit den Karten (Objekte) an. Die einzelnen Objekte kriegen dann entsprechend Eigenschaften und Funktionen.
Dann noch nen paar Funktionen für das komplette Kartenspiel.

Dustwolf ------------------------- Und wenn du lange in einen Abgrund blickst, blickt der Abgrund auch in dich hinein. F. Nietzsche
Avatar user-287
10.07.2006 15:37

Original von user-168
Jo, dann legst du quasi ein Array mit den Karten (Objekte) an. Die einzelnen Objekte kriegen dann entsprechend Eigenschaften und Funktionen.
Dann noch nen paar Funktionen für das komplette Kartenspiel.


Jo, also die Karten sind ja schon in einem array. Die Funktion hat als parameter die Karten der Spieler und die in der Mitte (community Cards) und gibt dann z.B. Königs Paar oder Herz Flush zurück.

Ob so oder so, man muss per if/switch jede Menge prüfen.