PHP5: Notice: Trying to get property of non-object (OOP)

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

  • PHP5: Notice: Trying to get property of non-object (OOP)

    Hey Leute

    hab ein dickes Problem. Der Code funzt auf PHP5.0.0, seit nem Update auf 5.1.4 (r4) jedoch nicht mehr, ich erhalte immer die Notice
    PHP-Code:
    NoticeTrying to get property of non-object in X on line X 
    . Kann mir jemand sagen wie dieser Fehler auftreten kann?

    Klasse:

    PHP-Code:
    class clsTest {
    public 
    $test1 0;
    public 
    $test2 0;
    public 
    $bolInvisible false;
    public 
    $root 0;

        public function 
    __construct($test1 0$test2 0$bolInvisible false$root 0) {
            
    $this->test1 $test1;
            
    $this->test2 $test2;    
            
    $this->bolInvisible $bolInvisible;
            
    $this->root $root;
        }


    Ich erstelle danach Objekte mit:

    PHP-Code:
    $test["$sys"."_"."$sysID"] = new clsTest($sys$sysIDfalse0
    auf.

    Bis jetzt funzt alles noch ohne Probleme.

    Wenn ich jedoch auf $test zugreife, gibts den oben genannten fehler.

    Aufruf:


    PHP-Code:
    for ($i=1$i<=count($test); $i++) {
        
    $sysID1 $link[$i]->test1;
        
    $sysID2 $link[$i]->test2;

    Ja ich weiss es ist nur ein Notice und das weil ich E_ALL on habe. Aber es stört mich trotzdem...


    Jemand ne Idee?

  • #2
    $link[$i] ist kein Objekt. Was ergibt var_dump($link[$i]);?
    Die Zeit hat ihre Kinder längst gefressen

    Kommentar


    • #3
      OffTopic:
      Versuch auch mal auf die Interpolation von Variablen zwischen den "" zu verzichten. Also mach aus "$sys"."_"."$sysID" lieber $sys.'_'.$sysID - ist viel sauberer, denn die ganzen " verwirren irgendwie Nur ne kleine Anmerkung
      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


      • #4
        Hab das Problem mittlerweile lokalisiert. es liegt eindeutig an der Key-Vergabe beim Array.

        Allerdings hab ichs noch nicht geschafft, die Arraywerte per Key abzufragen.

        - Wenn ich $test["$irgendeineVariable"]-> new clsTest (blablabla) ; und mit echo $test["eintest"]; aufrufe, erscheint dieser fehler, obwohl der key "eintest" existieren müsste.

        Wie definiere ich Keys also richtig? Mit ' wird nur $irgendeineVariable als text zurückgegeben...


        p.s. wie kann ich dann die zurückgebenden methodenwerte als key benutzen?:
        PHP-Code:
        $objTest["$sys[$i]->sys_test"

        Kommentar


        • #5
          PHP-Code:
          $objTest["$sys[$i]->sys_test"]  //falsch

          $objTest[$sys[$i]->sys_test]  //richtig 
          Mit var_dump() solltest du der Sache auf die schliche kommen.

          Kommentar


          • #6
            Also kann man generell sagen dass Variablen als Keys ohne " oder ' eingefügt werden können? Mir scheint nur dass diese Methode anders ist als ich möchte.

            Was ich will:

            $test = array("10, 5, 8, 90"); (zum Beispiel)

            jetzt möchte ich gezielt 90 ansprechen:
            $auslesevariable = 90

            echo $test[$auslesevariable].


            Jetzt will er den 90ten Wert auslesen. Ich will aber den Wert mit dem KEY "90"!

            Kommentar


            • #7
              Original geschrieben von fletschge
              Was ich will:

              $test = array("10, 5, 8, 90"); (zum Beispiel)
              Du willst also ein Array, welches nur ein Element enthält?
              Jetzt will er den 90ten Wert auslesen. Ich will aber den Wert mit dem KEY "90"!
              Du hast überhaupt kein Element mit dem Key "90".
              I don't believe in rebirth. Actually, I never did in my whole lives.

              Kommentar


              • #8
                oke sorry war falsch gezeigt. Ich zeige es an einem konkreten Beispiel:


                PHP-Code:
                $sArray = array();


                // $systems ist mit integern gefüllt (z.B. 300, 61, 77, 183 whatever)
                foreach ($systems as $system) {
                    
                $sArray[$systems] = "VALUE: ".$systems;

                jetzt möchte ich z.B. 300 auslesen:
                PHP-Code:
                $variablezumauslesen 300;

                echo 
                $sArray[$variablezumauslesen]; 
                da hakts jetzt.... ich erhalte entweder offset error, undefined index: 1 bis irgendwas.


                any ideas?

                Kommentar


                • #9
                  PHP-Code:
                  foreach ($systems as $system) {
                      
                  //$system[b]s[/b] is hier Array -  du willst $system
                      
                  $sArray[$system] = "VALUE: ".$system;


                  PS: Auch wenn ich den Sinn anzweifle. Was will man mit einem Array von Werten, wo der Key gleich der Wert ist und ich den key wissen muss um den Wert (der ja gleich ist) zu erfahren.

                  Kommentar


                  • #10
                    leider immernoch nicht

                    btw. wenn ich mit sArray[$variable] den key auslese, wie erhalte ich dann den n-ten wert? also z.b.

                    PHP-Code:
                    $wert 10;
                    echo 
                    $systems[$wert]; //soll 10 ausgeben 
                    Zuletzt geändert von fletschge; 18.07.2006, 12:07.

                    Kommentar


                    • #11
                      Original geschrieben von fletschge
                      PHP-Code:
                      $sArray = array();


                      // $systems ist mit integern gefüllt (z.B. 300, 61, 77, 183 whatever)
                      foreach ($systems as $system) {
                          
                      $sArray[$systems] = "VALUE: ".$systems;

                      Ausgabe des Arrays anschließend mit print_r ergibt was?
                      I don't believe in rebirth. Actually, I never did in my whole lives.

                      Kommentar


                      • #12
                        jo z.B.

                        PHP-Code:
                        Array
                        (
                            [
                        1] => Array
                                (
                                    [
                        main] => clsTest Object
                                        
                        (
                                            [
                        lsID] => 1
                                            
                        [radius] => 100
                                            
                        [test_iD] => 0
                                        
                        )

                                )

                            [
                        2] => Array
                                (
                                    [
                        main] => clsTest Object
                                        
                        (
                                            [
                        lsID] => 2
                                            
                        [radius] => 200
                                            
                        [test_iD] => 0
                                        
                        )

                                ) 

                        usw. dabei zählt [1] immer um eins rauf was ja eigentlich in ordnung wäre.


                        clsTest ist dabei so instanziert:

                        PHP-Code:
                        $objTest[$sys[$i]->system_grad][$sys[$i]->sys_id

                        Kommentar


                        • #13
                          jetzt möchte ich z.B. 300 auslesen:
                          Den 300. Wert oder jenes Index der 300 als Element enthält ??
                          PHP-Code:
                          //das 300. Element
                          echo $array[300];
                          //oder der Index welcher 300 als Wert hat
                          $array array_keys($array,300);
                          echo 
                          $array[0]; 
                          Oder verstehe ich dein Problem jetzt überhaupt nicht ?

                          Gruss

                          tobi
                          Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                          [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                          Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                          Kommentar


                          • #14
                            warum machst du überhaupt son schweinekrams mit variablen als keys?? lass doch einfache ne nummer weiterlaufen oder sonstwas, dann hast du keine probleme, an die werte zu kommen!!
                            solltest dir auch noch einmal das Kapitel zu Arrays durchlesen!

                            Kommentar


                            • #15
                              DANKE!

                              $array = array_keys($array,300);

                              war die Lösung!!!


                              by the way es gibt Gründe warum ich das mit Keys mache und nicht mit Index. Ich habe hier etwa 6 for-schleifen verschachtelt, da bleibt die Ubersicht nur mässig. Da will ich es mir einfach machen und per Key zugreifen ;-)

                              Kommentar

                              Lädt...
                              X