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.
Annonceindlæg tema
Offentlig digitalisering
Fra effektivisering til digital suverænitet. Hvordan skaber det offentlige en digital fremtid med AI, sikkerhed og kontrol i centrum?
10. december 2005 - 15:46
#1
Så er der nok ikke et objekt i dit array.
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.
10. december 2005 - 15:51
#3
Og det kan vi så studse over til du viser os noget relevant kode ;)
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.
10. december 2005 - 16:00
#5
Udksyld showHtml hedder memberen. Det er også der jeg laver den foreach, hvor jeg får fejlen.
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)
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 :)
10. december 2005 - 17:21
#8
Jeg undrer mig lidt over punktummet i den her: $this->posts[] .= $p; *g*
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å.
10. december 2005 - 18:12
#10
Prøv lige at fjerne det punktum. Du skal nok ikke lave andet om.
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.
11. december 2005 - 14:07
#12
Jeg samler slet ikke på point, tak. Svar selv, accepter eget svar. Samler du på forklaringer?
11. december 2005 - 14:51
#13
Om jeg samler på forklaringer :) Det må jeg vist have en forklaring på hvad du mener.
11. december 2005 - 15:51
#14
Ja, vil du have en forklaring på hvad der gik galt med det punktum?
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.
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.
11. december 2005 - 17:02
#17
Ah okay. Sådan :) Skummelt :) Jeg siger ihvertfald tak.
Vi tilbyder markedets bedste kurser inden for webudvikling