2012-03-25 6 views
2

Я создал класс телеги, который содержит песни, которые нужно купить. Класс cartSong отлично работает, но когда я пользуюсь классом тележки, всегда появляется ошибка около $this. Я хочу, чтобы переменная $songList (array) добавляла объект песни в корзину каждый раз, когда вызывается addToCart, а $trackno - итерация. Линия, где находится ошибка задается в коде:

<?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; 
    } 
} 

?> 

Существует только одна ошибка, когда я запускаю это:

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

Вот где я назвал код, это 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

Как вы называете addToCart? Можете ли вы предоставить код, в котором вы создаете объект, и вызвать эту функцию? – csteifel

+0

Вы уверены, что ошибка включена в этот файл? Кажется, вы используете $ this-> из этого файла ... –

+0

обновил код. Я вызвал addToCart во втором блоке кода, добавлен код addtocart.php –

ответ

1

Вы вызываете AddToCart как статический метод, используя оператор :: в коде:

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

Вместо этого вы должны ссылаться на функцию по отношению к реализованному объекту, используя оператор ->:

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

У вас есть такая же проблема с REMOVE и пустыми разговорами, а также.

Редактировать: Я вижу, что вы уже исправили в комментариях - я просто оставлю это здесь, я думаю.

 Смежные вопросы

  • Нет связанных вопросов^_^