Willkommen in der Webstatt Zum Webstatt Blog und Stories
Rebel4s Rebel4s am 09.07.06 17: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.

netcup.de Warum gibt es hier Werbung?
milahu milahu am 09.07.06 17:55

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

Rebel4s Rebel4s am 09.07.06 18:01

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


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

milahu milahu am 09.07.06 18:17

> ne funktion in ner funktion geht nicht oder?

Geht schon, ist aber nicht besonder schön. Dann doch lieber OOP ;)

Michael Michael am 09.07.06 18: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)

milahu milahu am 09.07.06 18:24

Quote
Fatal error: Cannot redeclare asdf() ...

Böser Garbage Collector..!

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

Rebel4s Rebel4s am 09.07.06 19:32

Quote
Original von milahu
[quote]Fatal error: Cannot redeclare asdf() ...

Böser Garbage Collector..!

Naja, musst wohl oder übel eine eigene Klasse aus deiner Funktion machen.[/quote]

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

milahu milahu am 09.07.06 19: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();
?>

Rebel4s Rebel4s am 09.07.06 20:15

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

Rebel4s Rebel4s am 10.07.06 16:07

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

Dustwolf Dustwolf am 10.07.06 16: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. :D

Michael Michael am 10.07.06 16:26

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

Rebel4s Rebel4s am 10.07.06 16:41

Quote
Original von Michael
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.

Michael Michael am 10.07.06 17: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. Dann einfach mit foreach über die Karten iterieren und Zähler aktualisieren.

Dustwolf Dustwolf am 10.07.06 17: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.

Rebel4s Rebel4s am 10.07.06 17:37

Quote
Original von Dustwolf
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.

Creative Commons Lizenzvertrag
Alle Inhalte des Webstatt-Archivs stehen unter einer Creative Commons Namensnennung - Weitergabe unter gleichen Bedingungen 3.0 Unported Lizenz.

Impressum & Kontakt