2012-03-25 3 views
2

Ich habe eine A-Cart-Klasse erstellt, die zu kaufende Songs enthält. Die cartSong Klasse funktioniert gut, aber wenn ich die Wagenklasse verwende, kommt immer ein Fehler über $this auf. Ich möchte, dass die Variable $songList (array) dem Wagen jedes Mal ein Song-Objekt hinzufügt, wenn addToCart aufgerufen wird, und $trackno, um zu iterieren. Die Linie, wo der Fehler liegt in dem Code angegeben:

<?php 
$indexpath = "index.php"; 
$cartpath = "data/cart.xml"; 

class cartSong{ 
    private $albumid = null; 
    private $trackno = null; 

    function cartSong($albumid, $trackno){ 
     $this->albumid = $albumid; 
     $this->trackno = $trackno; 
    } 

    function setSong($albumid, $trackno){ 
     $this->albumid = $albumid; 
     $this->trackno = $trackno; 
    } 

    function getTrackNo(){ 
     return $this->trackno; 
    } 

    function getAlbumID(){ 
     return $this->albumid; 
    } 
} 

class cart{ 
    public $songList; 
    public $songCount; 

    function cart(){ 
     $this->songList = array(); 
     $this->songCount = 0; 
    } 

    function addToCart($albumid, $trackno){ 
     $checker=0; 

     for($i=0;$i<$this->songCount;$i++){ // THIS LINE GIVES AN ERROR ($this->songCount) 
      if(($this->songList[$i]->getAlbumID()==$albumid) && ($this->songList[$i]->getTrackNo()==$trackno)) 
       $checker=1; 
     } 

     if($checker==0){ 
      $song = new CartSong($albumid, $trackno); 
      $this->songList[]=$song; 
      $this->songCount++; 
     } 
     else 
      echo "Song already exists in cart."; 
     echo $this->songList[0]->getAlbumID(); 
     echo $this->songList[0]->getTrackNo(); 
    } 

    function removeFromCart($albumid, $trackno){ 
     $checker=0; 

     for($i=0;$i<count($songList);$i++){ 
      if(($songList[$i].getAlbumId()==$albumid) && ($songList[$i].getTrackNo()==$trackno)) 
       $checker=1; 
     } 

     if($checker==1){ 
      array_splice($songList,$i); 
     } 
     else 
      echo "Song does not exist in cart."; 
    } 

    function emptyCart(){ 
     $songList = (array) null; 
    } 
} 

?> 

Es gibt nur einen Fehler, wenn ich dies auszuführen:

Fatal error: Using $this when not in object context in C:\wamp\www\musiquebasse\data\cartfunctions.php on line 40.

Hier ist, wo ich den Code genannt, ist dies addtocart.php :

<?php 
$indexpath = "index.php"; 
require_once "data/SessionControl.php"; 
require_once "data/cartfunctions.php"; 

    $album = $_GET["albumid"]; 
    $track = $_GET["trackno"]; 
    $action = $_GET["action"]; 
    $cart = new cart(); 

    // insert checker here (if the same song is added to cart 

    switch($action) { //decide what to do 
     case "add": 
      $cart::addToCart($album, $track); 
     break; 

     case "remove": 
      $cart::removeFromCart($album, $track);   
     break; 

     case "empty": 
      $cart::emptyCart(); 
     break; 

    } 

?> 
+0

Wie rufst du addToCart an? Können Sie den Code angeben, in dem Sie das Objekt erstellen und diese Funktion aufrufen? – csteifel

+0

Sind Sie sicher, dass der Fehler in dieser Datei enthalten ist? Es scheint, dass Sie $ this-> aus dieser Datei verwenden ... –

+0

aktualisiert den Code. Ich rief addToCart im 2. Codeblock an, addtocart.php –

Antwort

1

Sie rufen addToCart als statische Methode mit dem Operator :: im Code:

$cart::addToCart($album, $track); 

Stattdessen sollten Sie die Funktion gegen das instanzierte Objekt verweisen, mit dem Operator ->:

$cart->addToCart($album, $track); 

Sie haben das gleiche Problem mit dem Entfernen und leeren als auch Anrufe.

Edit: Ich sehe, dass Sie bereits in den Kommentaren behoben - Ich werde nur hier lassen, denke ich.

Verwandte Themen