kostenloser Webspace werbefrei: lima-city


Problem mit class->function() (Klassenübergreifend)

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    0-kenny197902

    0-kenny197902 hat kostenlosen Webspace.

    Hi ihr. Wer von euch kann mir bei folgendem Script helfen (Demo):

    class gruppe1
      {
      function func1($a, $b)
        {
        // Befehle ...
        }
      }
    gruppe1 = new gruppe1;
    
    class gruppe2
      {
      function func2($a, $b)
        {
        $gruppe1->func1('angabe1', 'angabe2'); // Merkt euch diese!!!
        }
      }
    gruppe2 = new gruppe2;

    Wie ihr seht, m?chte ich versuchen, aus $gruppe2->func2 einen Sprung in eine andere class ( $gruppe1->func1(...,...) ) aufzurufen. So wie ich es dort tag/mache">mache, klappt es allerdings nicht. Wer hat da evtl. einen L?sungsvorschlag? Mu? man da vielleicht irgendwas mit Parent anwenden?
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

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


  3. class gruppe1
      {
      function func1($a, $b)
        {
        // Befehle ...
        }
      }
    gruppe1 = new gruppe1;
    
    class gruppe2
      {
      function func2($a, $b)
        {
        $gruppe1->func1('angabe1', 'angabe2'); // Merkt euch diese!!!
        }
      }
    gruppe2 = new gruppe2;

    Wie ihr seht, m?chte ich versuchen, aus $gruppe2->func2 einen Sprung in eine andere class ( $gruppe1->func1(...,...) ) aufzurufen. So wie ich es dort mache, klappt es allerdings nicht. Wer hat da evtl. einen L?sungsvorschlag? Mu? man da vielleicht irgendwas mit Parent anwenden?


    Tja, das ist so ne Sache mit der Sichtbarkeit von Variablen. ;)

    Entweder du machst $gruppe1 in der Funktion func2 global oder du erstellst in dieser Funktion eine neue Variable $gruppe1, welche dann nat?rlich von der Klasse gruppe1 sein sollte.

    Den Code schreibe ich jetzt mal nicht, denn das solltest du selber k?nnen. ;)

    Jens
  4. Autor dieses Themas

    0-kenny197902

    0-kenny197902 hat kostenlosen Webspace.

    Thx f?r den Hinweis mit dem Global. Ich hab das mal als zus?tzlichen Begriff in Google angegeben, und zack kam mir der Befehl extends entgegen. Ich hab das jetzt folgenderma?en umgebaut, und es klappt 1a:
    class gruppe1
      {
      function func1($a, $b)
        {
        // Befehle ...
        }
      }
    gruppe1 = new gruppe1;
    
    class gruppe2 extends gruppe1
      {
      function func2($a, $b)
        {
        $this->func1('angabe1', 'angabe2'); // Merkt euch diese!!!
        }
      }
    gruppe2 = new gruppe2;


    Extend ist letztendlich eine Hinweisung, das eine andere Class in die gleiche hineinsimuliert werden soll. Allerdings d?rfen keine identischen Funktionsnamen auftauchen (sollte man im allgemeinen sowieso nicht).

    Edit: Nur mal so nebenbei. Ich find es echt Augenverletzend, das man im PHP-Code die Kommentarangaben kaum erkennt. Ich mu? immer mit STRG+A durch die code-Tags gehen :( - kann man sich da nicht mal was einfallen lassen?

  5. Thx f?r den Hinweis mit dem Global. Ich hab das mal als zus?tzlichen Begriff in Google angegeben, und zack kam mir der Befehl extends entgegen. Ich hab das jetzt folgenderma?en umgebaut, und es klappt 1a:


    Das war nicht ganz das was ich gemeint habe. ;)
    Du hast jetzt die Klasse gruppe2 als Unterklasse von gruppe1 gemacht.

    Was ich meinte ist folgendes:
    http://de3.php.net/manual/de/print/language.variables.scope.php

    Nat?rlich kann man das so machen wie du es gemacht hast.
    Aber wenn man schon OOP, dann sollte man sich immer ?berlegen ob es so in Sinn von OOP ist.

    Sprich macht es Sinn, das gruppe2 eine Unterklasse von gruppe1 ist?
    Oder macht es mehr Sinn, das gruppe2 als Objektvariable ein Objekt von gruppe1 hat?
    Oder sollte nur die Funktion func2 ein Objekt von gruppe1 gennerieren, damit es die Funktion benutzen kann?

    Diese Frage kann man nur dann beantworten, wenn man die Aufgaben deiner Klassen kennt.

    Jens
  6. 0******a

    call_user_method() sollte das sein, was du gesucht hast. Schaus dir mal in der PHP-Doku an.
  7. Autor dieses Themas

    0-kenny197902

    0-kenny197902 hat kostenlosen Webspace.

    hm, call_user_method wird in allen Beipielen auf php.net immer af einer h?heren Ebene ausgef?hrt. Damit mein ich also, das es immer nur Klassen au?erhalb von anderen Klassen aufruft (gutes deutsch heute ^^).
    Ich bekam es ja mit dem extends eigentlich schon hin, aber verrate mal kurz, worum es genau ging.
    Ich habe ca. 40 Klassen in einer derzeit 300KB gro?en PHP-Datei (... na gut, ums genauzusagen hat die ca. 6500 Zeilen PHP... ist der Library-Script meiner Seite). Dadrin ist z.B. die class convert. Die nutze ich, um z.B. aus der Datenbank ausgelesenen Text in ein Forenfreundliches Format umzuwandeln (z.B. durch Untauglichmachen von HTML, Javascript -und PHP Elementen) sowie auch z.B. BBCodes oder Timestamps umzuwandeln. Die andere Klasse, die ich meinte, ist die Klasse output. Diese ist so derma?en extrem gro?, das sie eigentlich Dinge wie Datenstreaming usw. beinhaltet (ich verwende nie print oder echo im ganzen Script, sondern $output->html). Der Hintergrundgedanke ist die gesamte Aufzeichnung des Traffics (schon sehr kompliziert gebaut).
    Aufjedenfall gibt es so manche Scripte, wo ich mir in den sogenannten Modul-Dateien (die werden auch bei vielen includes genannt, nur das ich nicht includiere, sodern eval() und exec (f?r dll?s) verwende) nutze. Ich m?chte diese Module so kompakt wie m?glich haben, und verwende daher fas nur noch Klassenaufrufe.
    Jedoch m?chte ich z.B. nicht unn?tig weitere Klassen bauen, sondern z.B. nach dem Ausf?hren einer Textkonvertierung die direkt auf den $output->html packen.
    Ich h?r mal lieber hier auf, sonst springt ihr gleich noch aus dem Fenster. Der ganze Zusammenhang unter allen Klassen ist auch viel zu kompliziert zu erkl?ren (sind ja immerhin ca. 40 und 300KB Daten).
    Wie gesagt es hat 1a geklappt.
  8. 0******a

    Das die Beispiele in der Doku immer ausserhalb von Klassen aufgerufen werden, ist eine Sache, dass du mit call_user_methos() (Arbeits-)Speicher sparst und das gleiche Ergebnis hast ist eine andere ;-)
    Probier es mal aus.
  9. 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!