kostenloser Webspace werbefrei: lima-city


Große Datei mit functions splitten

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    dev

    Kostenloser Webspace von dev, auf Homepage erstellen warten

    dev hat kostenlosen Webspace.

    Hallo!

    Ich hab ma eine Frage... und zwar hab ich eine große Datei in der sich eine class und mehrere functions befinden, die jeweils dann content ausgeben. Ungefähr so:

    class foo
    {
      function foo()
      {
        echo $this->bar1();
        echo $this->bar2();
        ...
      }
    
      function bar1()
      {
        return ...;
      }
    
      function bar2()
      {
        return ...;
      }
    
      ...
    }


    Jetzt möchte ich gerne die einzelnen functions "bar" in einzelne Dateien haben, sodass ich nicht immer das ganze Skript neu uploaden muss, wenn ich nur in einer "bar"-function was geändert habe. Wie mach ich das am schlausten? Eine Möglichkeit wäre natürlich mit include:

    Dateien:
    /index.php
    /bar/bar1.php
    /bar/bar2.php

    class foo
    {
      function foo()
      {
        echo $this->bar1();
        echo $this->bar2();
        ...
      }
    
      function bar1()
      {
        include("bar/bar1.php");
      }
    
      function bar2()
      {
        include("bar/bar1.php");
      }
    
      ...
    }


    Das ist ja aber nicht wirklich elegant. Kennt ihr eine bessere/schönere/einfachere Methode?

    Vielen Dank schonmal!
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Nein, dazu müsstest du deine Klasse ERWEITERN.

    Jede Erweiterung kannst du dann natürlich in eine extra Datei tun.
    Sieht dann in etwa so aus...

    foo.inc.php:
    class foo
    {
       function foo() {
        // ...
       }
    }


    foo2.inc.php:
    class foo2 extends foo
    {
       function bar1() {
         // ...
       }
    }


    foo3.inc.php:
    class foo3 extends foo
    {
       function bar2() {
         // ...
       }
    }


    index.php:
    include "foo.inc.php";
    include "foo2.inc.php";
    include "foo3.inc.php";
    
    $test = new foo();



    Grüßle
  4. Nur ganz kurz:

    class foo3 extends foo2


    und

    $test = new foo3();


    ;)


    Beitrag geändert: 23.10.2008 18:23:33 von tavern
  5. Autor dieses Themas

    dev

    Kostenloser Webspace von dev, auf Homepage erstellen warten

    dev hat kostenlosen Webspace.

    @tavern: Willst du mir sagen, dass ich jede class dann noch extra aufrufen muss? Und muss es immer

    class foo2 extends foo
    class foo3 extends foo
    class foo4 extends foo

    sein oder

    class foo2 extends foo
    class foo3 extends foo2
    class foo4 extends foo3

    ?

    Und noch eine Frage... wie kann ich die Funktionen dann aufrufen? Geht bei

    class foo2 extends foo
    {
       function bar1() {
         // ...
       }
    }


    dann einfach $this->bar1() oder muss ich $foo2:bar1() aufrufen?

    Vielen Dank für eure Hilfe! :)

  6. @tavern: Willst du mir sagen, dass ich jede class dann noch extra aufrufen muss? Und muss es immer

    class foo2 extends foo
    class foo3 extends foo
    class foo4 extends foo

    sein oder

    class foo2 extends foo
    class foo3 extends foo2
    class foo4 extends foo3

    ?

    Letzteres, das wollte ich damit ausdrücken ;) Dann hast Du in "foo4" alle Funktionen von "foo" bis "foo3" dabei. Und wie "jede class dann noch extra aufrufen"? :confused: Du musst immer die "letzte" Erweiterungsklasse instantiieren, nicht "foo".


    Und noch eine Frage... wie kann ich die Funktionen dann aufrufen? Geht bei


    dann einfach $this->bar1() oder muss ich $foo2:bar1() aufrufen?

    Vielen Dank für eure Hilfe! :)

    Auch wenn ich mich mit dem Klassenkonzept in PHP noch nicht wirklich auseinandergesetzt hab, sollte Ersteres funktionieren. Siehst Du ja aber dann.

    Aber grundsätzlich mal: Ist die Datei wirklich so groß, dass Du die aufteilen musst? Mir persönlich wär das a) zu viel Aufwand und b) widerspricht das eigentlich dem Klassenkonzept, das ich kenne ;)
  7. Autor dieses Themas

    dev

    Kostenloser Webspace von dev, auf Homepage erstellen warten

    dev hat kostenlosen Webspace.

    Ja das Problem ist nicht, dass die Datei so groß ist, sondern dass ich jedesmal, wenn ich nur in einer kleinen Funktion was ändere die ganze Datei neu hochladen muss. Ist einfach blöd, wenn ich ausversehen irgendwo einen Fehler mache, muss ich 1500 Zeilen Code durchsuchen... und wenn ich nur eine Datei ändere, in der eine Funktion (oder vllt ein paar) sind, dann kann ich den Fehler relativ klar eingrenzen.

    In dem Skript ist es so, dass jede Seite, die du aufrufst eine eigene Funktion hat. Also wenn ich das Impressum aufrufen will, wird die Funktion impressum() aufgerufen, die dann die Ausgabe erzeugt usw. Hat sich in dem Skript als relativ nützlich erwiesen.

    Haste vllt noch ne andere Idee? :) Eigentlich würde es ja auch schon reichen nur die gerade benötigte Funktion zu includen und nicht gleich alle... das schönste wär, wenn ich einfach Funktionen zu einer Klasse hinzufügen könnte. Als Pseudocode:

    class foo {
      function bar() {
      ...
      }
    
      include("function_bar2.php");
    }


    Sodass ich dann in
    bar()
    einfach
    echo $this->bar2()
    machen kann^^

    Aber es gibt keine Möglichkeit, das so zu machen außer mit extend oder?

    Falls dir sonst noch was schönes einfällt, lass es mich wissen ;)
  8. Hm.

    Idee 1: Schon mal über eine ordentliche Entwicklungsumgebung nachgedacht? Die zeigt Dir nämlich bestimmte Fehler (Semikolon vergessen, Anführungszeichen falsch gesetzt, ...) gleich an ;)

    Idee 2: Wenn Du die Klassen aufteilen willst, empfiehlt sich eventuell was a la

    class seite (Grundfunktionen für die Seitendarstellung)
    class impressum_seite extends seite (alles, was mit Impressum zu tun hat + Grundfunktionen)
    class kontakt_seite extends seite (alles, was mit Kontakt zu tun hat + Grundfunktionen)

    Weiß jetzt nicht, wie Deine Klasse aussieht und wie Deine Seite genau aufgebaut ist, aber dann würde das Aufteilen auch inhaltlich Sinn machen ;)
  9. Autor dieses Themas

    dev

    Kostenloser Webspace von dev, auf Homepage erstellen warten

    dev hat kostenlosen Webspace.

    hehe ja so ähnlich sieht das aus ;)

    Hab eine Funktion, die zuerst aufgerufen wird, die ruft dann Login-Funktion usw. auf und wenn alles ok ist, ruft die erste Funktion wieder die Seitenfunktion auf, die dann eine der erwähnten Ausgabe-Funktionen aufruft. Diese wiederum schreibt alle Ausgaben in eine Variable und gibt sie über eine andere Funktion "template" aus ;)

    Beispiel:

    class foo()
    {
      function foo()
      {
        if ($this->login() AND $page="impressum")
        {
          echo $this->impressum();
        }
      }
    
      function impressum()
      {
        $ausg = "blabla";
        echo $this->template($ausg);
      }
    
      function template($ausg)
      {
        $tpl = "blubb";
        $tpl.= $ausg;
        return $tpl;
      }
    }


    Also so ungefähr^^ Und die Impressums-Funktion variiert dann halt von Seite zu Seite, aber die Template- und die Login- usw. Funktionen bleiben fest. Und das ist mein Problem ;)
  10. Laut Google hilft in so einem Fall (um auf den Ausgangsbeitrag zurückzukommen) das "PECL classkit" bzw. das "PECL runkit", wie es inzwischen zu heißen scheint.
    Frag mich allerdings keine Details dazu!

    Ansonsten war mein Vorschlag ja nur EIN Vorschlag, die Klassen neu zu organisieren. Kannst Dir ja auch ne Template-Klasse machen, eine Klasse, die für Login/Logout zuständig ist, etc.
    Also im Prinzip nicht eine Klasse auf mehrere Dateien aufteilen, sondern auf mehrere Klassen (naja, hoffe, der Punkt wird klar), was - wie gesagt - wiederum Sinn machen würde ;)
  11. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!