php: "fremde" methode in klasse aufrufen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • php: "fremde" methode in klasse aufrufen

    ich habe folgendes problem:
    ich habe klasse x. ich mache am anfang des programms davon eine instanz zb $obj1 = new x;

    wenn ich folgendes mache funktioniert es nicht

    PHP-Code:
    PHP-Code:
    class 
      function 
    blah() { 
          
    $obj1->blub(); 
      } 


    wenn ich es hingegen so schreibe schon

    PHP-Code:
    PHP-Code:
    class 
      function 
    blah() { 
          
    $obj1 = new x
          
    $obj1->blub(); 
      } 


    gibt es eine andere variante? wenn ich die klasse jedes mal neu aufrufen müsste, bei jeder anderen klasse, ist es ziemlich umständlich. anders gefragt: wie kann ich eine instanz/methode innerhalb einer fremden klasse aufrufen?
    ich hoffe ihr versteht wie ich es meine. besser kann ich das leider nicht ausdrücken
    Erfahrungen vererben sich nicht jeder muss sie allein machen.

  • #2
    Re: php: "fremde" methode in klasse aufrufen

    Singleton-Pattern oder statische Methode

    Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

    bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
    Wie man Fragen richtig stellt

    Kommentar


    • #3
      wie genau funktioniert das?
      Erfahrungen vererben sich nicht jeder muss sie allein machen.

      Kommentar


      • #4
        was hat denn deine ausführliche Suche bisher ergeben?

        Kommentar


        • #5
          ich habe nicht so ganz verstanden wie Singleton-Pattern funktioniert.

          das ding ist, das die klasse global gehalten werden muss, da diese von verschiedenen anderen klassen benötigt wird und die angesamelten daten nicht verloren gehen dürfen
          Erfahrungen vererben sich nicht jeder muss sie allein machen.

          Kommentar


          • #6
            Original geschrieben von joextra
            ich habe nicht so ganz verstanden wie Singleton-Pattern funktioniert.
            Dann solltest du nochmals Google anwerfen und ein verständliches Tutorial finden (sind ja ~100.000 Suchergebnisse bei Google, da wird schon was brauchbares bei sein...*sarkasmus off*)

            Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

            bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
            Wie man Fragen richtig stellt

            Kommentar


            • #7
              ich habe es jetzt mit $GLOBALS gelöst. ist vielleicht nicht die tollste art, aber es tut
              Erfahrungen vererben sich nicht jeder muss sie allein machen.

              Kommentar


              • #8
                http://de3.php.net/manual/de/keyword...ekudotayim.php ?
                Für alle die Fehler suchen, gibts gratis tolle Debuggingmöglichkeiten:
                var_dump(), print_r(), debug_backtrace und echo.
                Außerdem gibt es für unsere Neueinsteiger ein hervorragendes PHP Tutorial zu PHP 4 und PHP 5 (OOP)
                Es heißt $array['index'] und nicht $array[index]! Und nein, das ist nicht egal!
                Dieses Thema lesen, um Ärger im Forum und verzögerte Hilfen zu vermeiden.

                Kommentar


                • #9
                  :: hab ich schon probiert. die daten sind am schluss des kompletten scripts (und dazu gehört mehr als nur ein paar klassen) nicht mehr vorhanden. das geht leider nur mit globals
                  Erfahrungen vererben sich nicht jeder muss sie allein machen.

                  Kommentar


                  • #10
                    Hi,

                    wie wärs wenn das betreffende objekt ein member einer basisklasse werden
                    würde. Laut seinem ersten post muss es nicht zwingend singleton sein.
                    Es geht ja darum nicht jedesmal das objekt in jeder klasse instanzieren zu
                    müssen.

                    PHP-Code:
                    class Base{
                       protected 
                    $the_obj;
                       public function 
                    __construct(){
                                 
                    $this->the_obj = new MyClass();
                       }
                    }

                    class 
                    Child1 extends Base{
                         public function 
                    __construct(){
                                
                    // warum man hier den elternctor explizit aufrufen muss ist mir schleierhaft
                               //war mal wieder ne tolle idee der php-entwickler 
                                
                    parent::__construct(); 
                         }
                        
                        public function 
                    foo(){
                             
                    $this->the_obj->some_method();
                        }

                    So ist das objekt in jeder kindklasse verfügbar.
                    Da aber die php-entwickler wieder mal nicht richtig nachgedacht haben
                    ist diese lösung aber auch murks weil es vom aufwand her egal ist
                    ob ich
                    PHP-Code:
                    $obj = new MyClass();
                    $obj->some_method(); 
                    schreibe oder aber
                    PHP-Code:
                    parent::__construct();
                    $this->obj->some_method(); 
                    Dadurch wird nichts gespart. Schlimmer noch, wenn man es mal vergisst,
                    bekommt man wunderbar schwer zu findene fehler.

                    greets
                    (((call/cc call/cc) (lambda (x) x)) "Scheme just rocks! and Ruby is magic!")

                    Kommentar


                    • #11
                      Original geschrieben von closure
                      PHP-Code:
                           public function __construct(){
                                  
                      // warum man hier den elternctor explizit aufrufen muss ist mir schleierhaft
                                 //war mal wieder ne tolle idee der php-entwickler 
                                  
                      parent::__construct(); 
                           } 
                      Muss man doch unter der Bedingung gar nicht?!

                      PHP-Code:
                      <?php

                      class MyClass {
                          function 
                      some_method() {
                              echo 
                      "kk";
                          }
                      }

                      class 
                      Base {
                         protected 
                      $the_obj;
                         public function 
                      __construct(){
                                   
                      $this->the_obj = new MyClass();
                         }
                      }

                      class 
                      Child1 extends Base {
                          public function 
                      foo(){
                               
                      $this->the_obj->some_method();
                          }
                      }

                      $test = new Child1();
                      $test->foo();
                      Funktioniert einwandfrei. Man muss den Eltern-Konstruktor nur aufrufen, sobald man in der Kind-Klasse einen separaten Konstruktor definiert

                      Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                      bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                      Wie man Fragen richtig stellt

                      Kommentar


                      • #12
                        Hi,

                        uuups, das ist neu. Das war zu php5 anfangszeiten definitiv nicht so.

                        In diesem fall, sry für die falsche information. Yeah sie können
                        auch was richtig machen.

                        greets
                        (((call/cc call/cc) (lambda (x) x)) "Scheme just rocks! and Ruby is magic!")

                        Kommentar

                        Lädt...
                        X