Avatar billede mxs Nybegynder
10. december 2005 - 14:33 Der er 16 kommentarer og
1 løsning

Array og objekter. Hvorfor kan jeg ikke hente det ud?

Hej

Jeg har et array som er fyldt med op med nogle objekter, men når jeg prøver at hente dem ud sådan her:

...
$o = $array[$i];
$o->getNavn();
...

Hvor det hele self. er omfattet af en forløkke.
Så får jeg fejlen:

Fatal error: Call to a member function on a non-object in

Jeg kan ikke lige gennemskue hvordan man ellers skal gøre.
Avatar billede erikjacobsen Ekspert
10. december 2005 - 15:46 #1
Så er der nok ikke et objekt i dit array.
Avatar billede mxs Nybegynder
10. december 2005 - 15:47 #2
Det er nemlig det som jeg studser lidt over, for når jeg laver en print_r på arrayet, så fortæller den at jeg har objekter i den.
Avatar billede erikjacobsen Ekspert
10. december 2005 - 15:51 #3
Og det kan vi så studse over til du viser os noget relevant kode ;)
Avatar billede mxs Nybegynder
10. december 2005 - 15:59 #4
:P

eksaktVejnavn.php
<?php
/*
        Denne klasse skal simulere en eksakt sogning paa
        et vejnavn
*/
require_once("Vej.class.php");
require_once("AddressReader.class.php");

class Eksaktvejnavn
{

        var $sogning;
        var $sql; //hack
        var $query; //dobbelt hack

        function Eksaktvejnavn(&$sogning)
        {
                //Saetter min sogning saa jeg kan opdaterer arrayet
                $this->sogning = &$sogning;

                //Jeg laver en sql
                $vejnavn = $this->sogning->getNavn();
                $this->sql = "select * from vejregister where vejnavn = '$vejnavn'";

                //Jeg laver et query
                $this->query = mysql_query($this->sql);

        }




        function doTheJob()
        {

                //Jeg laver en query
                $q = $this->query;

                //Jeg opretter en adresseReader saa jeg kan hente tal og bogstav ud
                $reader = new AddressReader();

                while($o = mysql_fetch_object($q))
                {
                        $vejnavn = $o->vejnavn;
                        $postnr = $o->postnr;
                        $id = $o->id;
                        $by = $this->sogning->getBynavn();

                        $obj = new Vej($vejnavn,$postnr,$by,$reader->getLetter(),$reader->getHouseNo(),$id);

                        //jeg saetter den i sogningsobjektet
                        $this->sogning->setPosts($obj);

                }
                }



        }


        function find()
        {

                //Jeg laver et query
                $q = $this->query;

                //Taeller op hvor mange rows der er i queryet
                $rows = mysql_num_rows($q);


                if($rows >= 1)
                {

                        return true;

                }else
                {

                        return false;

                }


        }

}

?>

Vej.class.php
<?php


class Vej
{


        var $navn;
        var $postnummer;
        var $by;
        var $tal;
        var $bogstav;
        var $id;


        function Vej($navn, $postnummer, $by, $bogstav, $tal, $id)
        {
                $this->navn = $navn;
                $this->postnummer = $postnummer;
                $this->by = $by;
                $this->tal = $tal;
                $this->id = $id;
                $this->bogstav = $bogstav;


        }



        function getNavn()
        {
                return $this->navn;
        }

        function getPostnummer()
        {
                return $this->postnummer;
        }

        function getBy()
        {
                return $this->by;
        }

        function getTal()
        {
                return $this->tal;
        }

        function getId()
        {
                return $this->id;
        }

        function getBogstav()
        {
                return $this->bogstav;
        }


}

?>

Sogning.php
<?php
/*
        Denne klasse simulere en sogning som kan foretages
*/

require_once("Vej.class.php");

class Sogning
{

        var $hits;
        var $sql;
        var $posts;
        var $navn;
        var $postnummer;

        function Sogning()
        {
                $this->hits = 0;
                $this->posts = array();


        }

        function antalHits()
        {

                $this->hits++;

        }

        function getHits()
        {

                return $this->hits;

        }

        function saetBynavn($bynavn)
        {
                $this->bynavn = $bynavn;
        }

        function saetPostnummer($postnummer)
        {
                $this->postnummer = $postnummer;
        }

        function saetNavn($navn)
        {
                $this->navn = $navn;
        }

        function getBynavn()
        {              return $this->bynavn;
        }

        function getPostnummer()
        {
                return $this->postnummer;
        }

        function getNavn()
        {
                return $this->navn;
        }

        function saetSql($sql)
        {

                $this->sql = $sql;

        }

        function getSql()
        {

                return $this->sql;

        }


        function mergeArray($a1)
        {
                $this->array = array_merge($this->array , $a1);
        }


        function setPosts($p)
        {

                $this->posts[] .= $p;

        }

        function showHtml()
        {
                /*
                Skal tage arrayet og lave et flot html tabel ud af det
                */

                //jeg taget det array der er
                $array = $this->posts;

        print_r($array);

                $arrayLength = count($array)-1;

                //Nu vil jeg ha det skrevet ud i denne flotte tabel
                foreach($array as $i)
              {


                //Nu vil jeg finde vejnavn, by og postnummer
                $vejnavn = $i->getNavn();
                $postnummer = $i->getPostnummer();
                $id = $i->getId();



                $body .= "
                        <tr>
                        <td>$postnummer</td>
                        <td>$t $vejnavn</td>
                        <td><a href=\"add.php?id=$id\">Vaelg</a></td>
                        </tr>
                        ";


                }


                $header = "
                        <table border=1 width=90% align=center>
                        <tr>
                        <td width=20%><b>Postnummer</b></td>
                        <td><b>Vejnavn</b></td>
                        <td><b>link</b>
                      </tr>
                        ";

                $footer ="
                        <tr>
                        <td colspan=3><center>Made by Walling og Slot - beta 1</center></td>
                        </table>
                        ";

                $string=$header;
                $string.=$body;
                $string.=$footer;

                print $string;

        }

        function getPosts()
        {

                return $this->posts;


        }

}

?>

Sådan ser det ud. Altså Eksaktvejnavn opretter et nyt vej objekt som bliver smidt over i Sogning objektet og hevet ud i getHtml memberen.
Avatar billede mxs Nybegynder
10. december 2005 - 16:00 #5
Udksyld showHtml hedder memberen. Det er også der jeg laver den foreach, hvor jeg får fejlen.
Avatar billede erikjacobsen Ekspert
10. december 2005 - 17:03 #6
Du siger det er her? Hvad skriver din print_r ud ?

              $array = $this->posts;

        print_r($array);

                $arrayLength = count($array)-1;

                //Nu vil jeg ha det skrevet ud i denne flotte tabel
                foreach($array as $i)
Avatar billede mxs Nybegynder
10. december 2005 - 17:05 #7
Min print_r skriver det her ud
Array ( [0] => Object [1] => Object [2] => Object [3] => Object [4] => Object [5] => Object [6] => Object [7] => Object [8] => Object [9] => Object [10] => Object [11] => Object [12] => Object [13] => Object [14] => Object [15] => Object [16] => Object [17] => Object [18] => Object [19] => Object [20] => Object [21] => Object [22] => Object [23] => Object [24] => Object [25] => Object [26] => Object [27] => Object [28] => Object [29] => Object [30] => Object [31] => Object [32] => Object [33] => Object [34] => Object [35] => Object [36] => Object [37] => Object [38] => Object [39] => Object [40] => Object [41] => Object [42] => Object [43] => Object [44] => Object [45] => Object [46] => Object [47] => Object [48] => Object [49] => Object [50] => Object [51] => Object [52] => Object [53] => Object [54] => Object [55] => Object [56] => Object [57] => Object [58] => Object [59] => Object [60] => Object [61] => Object [62] => Object [63] => Object [64] => Object [65] => Object [66] => Object [67] => Object [68] => Object [69] => Object [70] => Object [71] => Object [72] => Object [73] => Object [74] => Object [75] => Object [76] => Object [77] => Object [78] => Object [79] => Object [80] => Object [81] => Object [82] => Object [83] => Object [84] => Object [85] => Object [86] => Object [87] => Object [88] => Object [89] => Object [90] => Object [91] => Object [92] => Object [93] => Object [94] => Object [95] => Object [96] => Object [97] => Object [98] => Object [99] => Object [100] => Object [101] => Object [102] => Object [103] => Object [104] => Object [105] => Object [106] => Object [107] => Object [108] => Object [109] => Object [110] => Object [111] => Object [112] => Object [113] => Object [114] => Object [115] => Object [116] => Object [117] => Object )

Så der er da noget i :)
Avatar billede erikjacobsen Ekspert
10. december 2005 - 17:21 #8
Jeg undrer mig lidt over punktummet i den her:

  $this->posts[] .= $p;

*g*
Avatar billede mxs Nybegynder
10. december 2005 - 17:23 #9
Er det ikke sådan man pusher noget på et array? Man kunne vel gøre det med array_push() også.
Avatar billede erikjacobsen Ekspert
10. december 2005 - 18:12 #10
Prøv lige at fjerne det punktum. Du skal nok ikke lave andet om.
Avatar billede mxs Nybegynder
11. december 2005 - 12:06 #11
Hehe det gjorde jo en verden til forskel. Tak for det. Smid et svar, så skal du få point.
Avatar billede erikjacobsen Ekspert
11. december 2005 - 14:07 #12
Jeg samler slet ikke på point, tak. Svar selv, accepter eget svar.
Samler du på forklaringer?
Avatar billede mxs Nybegynder
11. december 2005 - 14:51 #13
Om jeg samler på forklaringer :) Det må jeg vist have en forklaring på hvad du mener.
Avatar billede erikjacobsen Ekspert
11. december 2005 - 15:51 #14
Ja, vil du have en forklaring på hvad der gik galt med det punktum?
Avatar billede mxs Nybegynder
11. december 2005 - 16:12 #15
Jamen det vil jeg da gerne!! For som jeg kan se bliver der jo smidt et eller andet i arrayet. Bare ikke det rigtige.
Avatar billede erikjacobsen Ekspert
11. december 2005 - 17:00 #16
Jo da ;)

"." er strengsammensætning i PHP. Så du tager et objekt, og bruger den i en sammenhæng hvor PHP forventer en streng. Der "konverteres" derfor til en streng, nemlig strengen "Object". Med print_r ser du derfor ikke dine objekter, men bare en række ens strenge.
Også derfor du får fejlbeskeden.

Man kan bruge http://uk.php.net/var_dump som giver flere oplysninger, bl.a. typen af de ting man ser.
Avatar billede mxs Nybegynder
11. december 2005 - 17:02 #17
Ah okay. Sådan :) Skummelt :) Jeg siger ihvertfald tak.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester