Gå til innhold

Array oppfører seg som to forskjellige array'er


Anbefalte innlegg

Hei!

 

Jeg har en array ved navn $produktArray liggende i fil produkter.php.

Denne filen er inkludert i header.php, ved hjelp av include. Sistnevnte er så inkludert i en fil ved navn produkt.php.

 

I denne filen legger jeg et objekt ($produkt) til arrayen:

array_push($produktArray, $produkt);

I samme fil fungerer følgende:

echo $produktArray[0]->navn;

Overnevnte fungerer imidlertid ikke i en annen fil som også inkluderer header.php. Der får jeg "Undefined offset: 0".

 

Help anyone? :)

Lenke til kommentar
Videoannonse
Annonse

Uten så se noe kode er det ikke helt lett. Header blir inkludert i (minimum) to filer, det du da legger til i $produktArray i fil1 er ikke tilgjengelig i $produktArray i fil2, noe du kanskje forventer hvis jeg forstår ting riktig? $produktArray blir opprettet på nytt i fil1 og fil2.

 

Bruk print_r() for å kontrollere innholde i variablene

echo '<pre>'.print_r($produktArray, true).'</pre>';
Det er også greit å kontrollere at det du skal bruke faktisk finnes

if (isset($produktArray[0]) and is_object($produktArray[0]) and property_exists($produktArray[0],'navn')){
    echo $produktArray[0]->navn;
}
Lenke til kommentar

Takk for tilbakemeldinger. Vil altså $produktArray behandles en unik array for hver include av produkt.php?

Filene ser omtrent slik ut: (unnlatt instansvariabler og initiering av disse)

 

produkt.php

class Produkt {
  
  // instansvariabler

  public function __construct(/*instansvariabler*/) {
    // initierer instansvariabler 
  }

  public toString() {
    // echo'er ut instansvariabler
  }

}

$produktArray = array(); // Inneholder alle produkter

header.php

<!DOCTYPE html>
<html>
<head>
  <base href="http://localhost/PHP/Nettbutikk/"/>
  <link rel="stylesheet" type="text/css" href="myStyle.css">
  <meta charset="UTF-8">
  <?php include 'produkt.php';?>
  <link rel="icon" type="image/png" href="img/favicon.png">
</head>

<body>

// resten av innhold på siden

produkter.php

<?php include '../header.php';

array_push($produktArray, new Produkt(/*instansvariabler*/)); ?>

Legger jeg til et produkt objekt i arrayen fra produkt.php, så er eksisterer det i alle undersider som inkluderer nevnt fil.

 

Legger jeg imidlertid til et produkt objekt i arrayen fra produkter.php, så eksisterer det kun i samme fil.

Endret av Defo
Lenke til kommentar

Legger jeg til et produkt objekt i arrayen fra produkt.php, så er eksisterer det i alle undersider som inkluderer nevnt fil.

 

Legger jeg imidlertid til et produkt objekt i arrayen fra produkter.php, så eksisterer det kun i samme fil.

Ja. For hver gang du laster produkter.php så vil du kun få med deg de opprinnelige verdiene i $produktArray, som blir satt i produkt.php. Når siden er ferdig "behandlet" så blir alle variabler og slik ryddet vekk.

Skal du ha med dette videre må du lagre det ett sted: i $_SESSION (da kun så lenge session eksisterer), i en fil, database eller lignende. Og så må du hente frem de lagrende produktene igjen hver gang siden lastes.

 

Slik du inkluderer filene så kan du se på det som en fil som ser slik ut

<!DOCTYPE html>
<html>
<head>
  <base href="http://localhost/PHP/Nettbutikk/"/>
  <link rel="stylesheet" type="text/css" href="myStyle.css">
  <meta charset="UTF-8">
<?php
class Produkt {
  
  // instansvariabler

  public function __construct(/*instansvariabler*/) {
    // initierer instansvariabler 
  }

  public toString() {
    // echo'er ut instansvariabler
  }

}

$produktArray = array(); // Inneholder alle produkter
?>
<link rel="icon" type="image/png" href="img/favicon.png">
</head>

<body>

// resten av innhold på siden

<?php
array_push($produktArray, new Produkt(/*instansvariabler*/)); 
?>
Endret av Crowly
Lenke til kommentar
  • 4 uker senere...

Ikke for å virke ekkel - men ikke gi vane av å laste alt i header (header.php holder produkt variabel).

Om du ikke koder i MVC -

så ta heller og inkluder modellen for dataene du henter ut, kjør

$produkt = new produktModell();

 

så f.eks

$produktliste = $produkt->hentAlleProdukter();

 

Les opp på MVC.

Separering av alle deler av en side (Model View Controller) gjør ting enklere å feilsøke, vedlikeholde, endre og videreutvikle.

Endret av lombriz
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...