Avatar billede googolplex Novice
12. oktober 2003 - 12:41 Der er 9 kommentarer og
1 løsning

Returnere array fra klasse

Jeg har lige lavet min første klasse som et forsøg, nu er der noget jeg undrer mig over. Spørgsmålet er simpelt tror jeg :-)

Jeg har følgende (uddrag):

class Database {

    var $result;
    var $sql;
    var $rows = array();

    function returnRows() {
        $this->doQuery($this->sql);
       
        while ($row = mysql_fetch_object($this->result)) {
            $this->rows = $row;
        }

        return $this->rows;
    }
}

Nu har jeg prøvet følgende:

$conn = new Database();
$conn->openConnection();
$conn->setSql("SELECT forfatter, overskrift, indhold FROM artikler WHERE artikelID = '$artikelID'");
$rows = $conn->returnRows();
$conn->closeConnection();

$oprettet = $rows[0]->oprettet;
$overskrift = $rows[0]->overskrift;

Men det funker ikke :(

Hvis jeg ændrer '$this->rows' til $rows[] og returnerer $rows i stedet, så virker det.

Hvorfor virker det ikke når jeg returnerer '$this->rows' ? Jeg har jo angivet at '$this->rows' er et array ??
Avatar billede googolplex Novice
12. oktober 2003 - 12:45 #1
$oprettet = $rows[0]->oprettet;
$overskrift = $rows[0]->overskrift;

Er selvfølgelig:

$forfatter = $rows[0]->forfatter;
$overskrift = $rows[0]->overskrift;
$indhold = $rows[0]->indhold;
Avatar billede erikjacobsen Ekspert
12. oktober 2003 - 12:50 #2
$this->rows[] = $row;
Avatar billede erikjacobsen Ekspert
12. oktober 2003 - 12:51 #3
nå det skriver du jo. Men du skal netop lavet et array af objekter.
Det du gør med $this->rows = $row; er at overskrive den gamle værdi,
så det nu kun er et objekt
Avatar billede googolplex Novice
12. oktober 2003 - 12:51 #4
Ok, det troede jeg ikke man måtte, prøvet det lige af :-)
Avatar billede googolplex Novice
12. oktober 2003 - 12:52 #5
Nej, jeg skriver '$this->rows = $row;', ikke '$this->rows[] = $row;'

Er det fejlen så ?
Avatar billede erikjacobsen Ekspert
12. oktober 2003 - 12:56 #6
Ja, du skal gøre som jeg skriver :))
Avatar billede googolplex Novice
12. oktober 2003 - 13:02 #7
Ja, det virker nemlig :-)

Lige et lille spørgsmål i denne forbindelse angående $this->attribute:

Er det så korrekt opfattet, at man skal bruge Angående $this->attribute, når det er en attribut der skal kunne benyttes af alle klassens metoder, og hvis den kun skal bruges i en enkelt metode, så skal jeg bare bruge $variabel som jeg plejer ?

Smid et svar :)
Avatar billede erikjacobsen Ekspert
12. oktober 2003 - 13:19 #8
Hvis du skrive $variabel får du en lokal variabel i funktionen. Den er
ellers ikke kendt i klassen.
Avatar billede googolplex Novice
12. oktober 2003 - 13:27 #9
Godt, så er der altså noget jeg har fattet :P

Smid et svar :)
Avatar billede erikjacobsen Ekspert
12. oktober 2003 - 13:39 #10
nåh ja
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