26. juli 2008 - 20:55Der er
13 kommentarer og 1 løsning
Objekter i array
Hey eksperter,
Jeg har kodet i Java i godt et års tid nu og er nu på vej til at kaste mig ud i objekt orienteret PHP.
Kan nogen af jer måske fortælle mig, hvordan man lagre flere objekter i en arrayliste? F.eks., hvis jeg nu vil oprette 3 forskellige objekter af klassen "Member" og ligge dem i en arrayliste, hvordan gør jeg det?
Jeg har selv været ved at rode med noget og kan udmærket godt få lavet et objekt og puttet det ind i array'et, men når jeg vil oprette et member-objekt mere, så bliver det åbenbart bare overskrevet. Er det fordi arrayet skal ligge som en session, eller?
if (!isset($_SESSION[memberList]) || !is_array($_SESSION[memberList])) $_SESSION[memberList] = array();
Men som sagt er det kun på sessions-niveau, de objekter du opretter. Da PHP kun lever mellem sidevisninger, giver det nok mest mening enten at smide det i en memcache eller en database.
Og så skal du have styr på din indeksering af arrayet. Enten skal du definere hvad memberList er, eller også skal du have nogle gåseøjne om, så det er strengen "memberList".
Altså; enten er det
define('memberList', 'foobar'); // Koden ovenfor
eller
if (!isset($_SESSION['memberList']) || !is_array($_SESSION['memberList'])) $_SESSION['memberList'] = array(); // osv..
if (!isset($_SESSION[memberList]) || !is_array($_SESSION[memberList])) $_SESSION[memberList] = array();
og det virker perfekt nu!
Forstår bare ikke, hvad forskellen er :S du siger, at hvis sessionen variablen ikke er sat og hvis den ikke er et array, så skal den sættes til at være et array.
Hvorfor kan man ikke bare gøre som jeg gjorde? $_SESSION[memberList] = array();
Som Erik siger det, bliver koden læst fra oven og ned, hver gang siden kaldes. Når du i koden når til linjen
$_SESSION['memberList'] = array();
vil den gøre nøjagtigt hvad der står - altså sætte variablen lig et tomt array. Så vidt jeg kan forstå har du tidligere programmeret Java(?) Det vil svare lidt til, at du i Java lavede en
class ... { private List<Member> memberList; ...
og i stedet for blot at sætte den i "public ...", gjorde noget lignende
public void refreshPage() { memberList = new ArrayList(); memberList.add(...)... ... }
hvor refreshPage kaldes hver gang der skal oprettes et nyt Member-objekt.
---
Det if-sætningen foreskriver, er blot at variablen kun skal initialiseres til den tomme liste, hvis ikke den allerede er en liste i forvejen. Grunden til !isset(...) foran, er at du ikke kan "teste" på en variabel der slet ikke findes. Til sammenligning er det ikke tilladt at skrive
echo $foo;
hvis ikke $foo er sat forinden. Så samlet set spørger jeg blot, "hvis der ikke i forvejen er nævnt noget om en liste ved navn memberList, ELLER hvis der findes en variabel med navn memberList, men som ikke er en liste - da skal listen oprettes".
Du kunne undvære den sidste del (efter ELLER), så der blot står
if (!isset($_SESSION['memberList'])) ....
Da er det dog lidt usikkert hvad der sker, hvis du andet steds i koden, har fået sat memberList variablen til noget andet end et array, når du senere sætter elementer i arrayet.
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.