Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Zugriff auf eine Klasse innerhalb einer Funktion -&amp

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Zugriff auf eine Klasse innerhalb einer Funktion -&amp

    Hi all,

    habe aktuell einen "kleinen" Fehler, wo ich nicht so ganz verstehe, warum es so nicht gehen will, bzw. wie man das "problem" lösen kann.

    Also, ich habe eine DB Klasse die ich mit
    Code:
    $db = new db($db_server,$db_user,$db_password,$db_name);
    initialisiere. Soweit so gut geht das alles perfekt.

    Nun möchte ich innerhalb einer Funktion auf die DB Klasse zugreifen.

    Mache ich innerhalb der Funktion ein
    Code:
    global $db;
    geht das auch problemlos.

    Versuche ich hingegen die variable über
    Code:
    test($db);
    bzw.
    Code:
    function test($db){
    zu übergeben um auf die DB klasse zuzugreifen, kommt nur ein "Call to a member function....." fehler.

    Hat mir da jemand eine erkärung für?

    Normalerweise ist das doch überhaupt kein problem, Daten an eine Funktion zu übergeben, mit "normalen" variablen klappt das fehlerfrei, nur bei o.g. Funktion scheint es nicht zu klappen.

    Danke schonmal im vorraus für evt. Tips.

  • #2
    Wie genau sieht Dein Funktionsaufruf und die Funktion aus?


    Btw: Die Frage gehört sicherlich nicht in den Fortgeschrittenenbereich...

    Kommentar


    • #3
      1.) Warum sollte das NICHT eine Fortgeschrittene Frage sein.

      Ich habe nur einige teile meiner Scripte von reinen Funktionen jetzt angefangen auf Klassen umzustellen.

      2.)
      Code:
      $result = $db->query("datenbank Query")
      Und nochmals, benutze ich
      Code:
      global $db;
      funktioniert alles Fehlerfrei. Nur möchte ich davon wegkommen, da mir das zu unübersichtlich ist in jeder Funktion erst ein
      Code:
      global a,b,c,d,e,f,g,h,i,j,etc.;
      einfügen zu müssen

      Ich möchte wie es OOP konform ist, alles in den Funktionsaufruf reinpacken können, damit besser zu sehen ist, welche Daten überhaupt an eine Funktion übergeben wurden.

      Kommentar


      • #4
        Wenn Du meine Frage ignorierst, kann ich auch nich weiterhelfen.

        Offensichtlich ist die Variable, die den Weg in Deine Funktion kein Objekt. Wie
        es dazu kommt, kannst nur Du wissen, wenn Dein Skript weiterhin 'top
        secret' bleiben soll.

        Also viel Glück...

        /edit:

        Hierzu noch:
        Zitat von MS Master
        1.) Warum sollte das NICHT eine Fortgeschrittene Frage sein.
        Weil einem Fortgeschrittenen klar sein sollte, wie eine Variable an eine Funktion übergeben wird.

        Kommentar


        • #5
          Schön, dass du die Fehlermeldung einfach abgeschnitten hast.
          Hieß es "Error : Call to a member function on a non-object."?
          ^^

          Kommentar


          • #6
            Zitat von Zergling
            Hieß es "Error : Call to a member function on a non-object."?
            ^^
            Dahingehend hatte auch ich spekuliert.

            Kommentar


            • #7
              Und damit es verständlicher ist, nochmals ein beispiel:

              Code:
              $db = new db($db_server,$db_user,$db_password,$db_name);
              $result = $db->query("datenbank Query")
              geht , seit über 1 Jahr, in mehreren Hunder scripten bisher fehlerfrei.

              Nur jetzt möchte ich gerne ein
              $db = new db($db_server,$db_user,$db_password,$db_name);

              function test(){
              $result = $db->query("datenbank Query")
              }

              test();
              [/code] was natürlich gar nicht geht, da kein bezug zu "$db" vorhanden ist.

              Wie bekomme ich die funktion "test" jetzt dazu, auf $db zugreifen zu können, OHNE das ich ein
              Code:
              global $db;
              in die Funktion einfüge.

              So geht das schon
              Code:
              $db = new db($db_server,$db_user,$db_password,$db_name);
              
              function test(){
                   global $db;
                   $result = $db->query("datenbank Query")
              }
              
              test();
              , nur möchte ich vom " global $db;" weg, und hin zu funktionen, wo alle parameter rein über den Funktionsaufruf zur verfügung gestellt werden.

              Kommentar


              • #8
                Ja, die fehlermeldung lautet komplett :
                Code:
                Call to a member function query() on a non-object in

                Kommentar


                • #9
                  Der Funktion das Datenbank-Objekt als Parameter übergeben.

                  Kommentar


                  • #10
                    Zitat von karl-150
                    Wenn Du meine Frage ignorierst, kann ich auch nich weiterhelfen.

                    Offensichtlich ist die Variable, die den Weg in Deine Funktion kein Objekt. Wie
                    es dazu kommt, kannst nur Du wissen, wenn Dein Skript weiterhin 'top
                    secret' bleiben soll.

                    Also viel Glück...

                    /edit:

                    Hierzu noch:
                    Zitat von MS Master
                    1.) Warum sollte das NICHT eine Fortgeschrittene Frage sein.
                    Weil einem Fortgeschrittenen klar sein sollte, wie eine Variable an eine Funktion übergeben wird.
                    Äh hallo, ich HABE sowohl die Funktions Definition, als auch den Funtkionsaufruf im 1. Beitrag gepostet. !!!!

                    Kommentar


                    • #11
                      Zitat von Zergling
                      Der Funktion das Datenbank-Objekt als Parameter übergeben.
                      Hallo,

                      genau das habe ich doch schon versucht.

                      Nochmal :
                      Code:
                      $db = new db($db_server,$db_user,$db_password,$db_name);
                      
                      function test(){
                           global $db;
                           $result = $db->query("datenbank Query")
                      }
                      
                      test();
                      -> Geht

                      Code:
                      $db = new db($db_server,$db_user,$db_password,$db_name);
                      
                      function test($db){
                           $result = $db->query("datenbank Query")
                      }
                      
                      test($db);
                      -> geht NICHT, es kommt der o.g. Fehler
                      Code:
                      Call to a member function query() on a non-object in

                      Kommentar


                      • #12
                        Zitat von MS Master
                        Äh hallo, ich HABE sowohl die Funktions Definition, als auch den Funtkionsaufruf im 1. Beitrag gepostet. !!!!
                        Trotzdem war diese nicht korrekt, da PHP nur äußerst selten mit
                        unberechtigten Meldungen um sich schmeißt.

                        Daher meine Frage:
                        Zitat von karl-150
                        Wie genau

                        Kommentar


                        • #13
                          @karl-150

                          genau deswegen habe ich das jetzt nochmals Komplett aufgeschrieben, was geht, und was nicht geht.

                          Kommentar


                          • #14
                            Und jetzt packst Du noch einmal in Kurzform die Klasse dazu, so dass auch
                            ich die Meldung nachvollziehen kann.

                            PHP-Code:
                            <?php

                            class db
                            {
                              function 
                            query($param) {
                                echo 
                            $param;
                              }
                            }

                            $db = new db($db_server,$db_user,$db_password,$db_name);

                            function 
                            test($db){
                                 
                            $result $db->query("datenbank Query");
                            }

                            test($db);

                            ?>

                            Kommentar


                            • #15
                              PHP-Code:
                              <?php
                              class MyObject
                              {
                                  function 
                              myMethod()
                                  {
                                      print 
                              "Hello World!";
                                  }
                              }

                              function 
                              MyFunction($object)
                              {
                                  
                              $object->myMethod();
                              }

                              $myObject = new MyObject();
                              MyFunction($myObject);
                              ?>
                              Und was geht daran nicht?

                              Kommentar

                              Lädt...
                              X