php: "fremde" methode in klasse aufrufen

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • 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

    Comment


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

      Comment


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

        Comment


        • #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.

          Comment


          • #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

            Comment


            • #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.

              Comment


              • #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.

                Comment


                • #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!")

                  Comment


                  • #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

                    Comment


                    • #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!")

                      Comment

                      Working...
                      X