Я создал класс телеги, который содержит песни, которые нужно купить. Класс 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;
}
?>
Как вы называете addToCart? Можете ли вы предоставить код, в котором вы создаете объект, и вызвать эту функцию? – csteifel
Вы уверены, что ошибка включена в этот файл? Кажется, вы используете $ this-> из этого файла ... –
обновил код. Я вызвал addToCart во втором блоке кода, добавлен код addtocart.php –