Obiekt "koszyk" zawierający cenę oraz ilość

Obiekt "koszyk" zawierający cenę oraz ilość
AD
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 403
0

Dlaczego ta klasa nie działa i nie odpala. Dziękuję za pomoc

Kopiuj
<?php

class basket

{

public $id;
public $ile;
public $cena;

function _construct($id, $cena, $ile){

$this->id = $id;
$this->cena = $cena;
$this->ile = $ile;

}

};

function add()
{

$_SESSION['basket'] = array();


if(isset($_SESSION['basket'][$id])){
$_SESSION['basket'][$id]->ile++;
$_SESSION['basket'][$id]->cena = $cena;

echo "id: $this->id <br> ";
echo "id: $this->cena <br> ";
echo "id: $this->ile <br> ";

};

$basket1 = new basket(1,20,30);
$basket1->add();

?>

Kod błędów:

Kopiuj
Ta strona nie działaSerwer serwer2232156.home.pl nie może teraz obsłużyć tego żądania.
HTTP ERROR 500
EH
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1208
3

Ogarnij formatowanie bo razi tak, że nikomu się nie będzie chciało ci odpowiedzieć

obscurity
  • Rejestracja: dni
  • Ostatnio: dni
4

jak na moje to metoda add jest poza klasą, dodatkowo tutaj:

Kopiuj
$_SESSION['basket'] = array();


if(isset($_SESSION['basket'][$id])){

ustawiasz zmienną na pustą tablicę a potem sprawdzasz czy coś w niej jest. Niewiele pamiętam z php ale to chyba się nie uda

jurek1980
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3581
5

Tradycyjnie, błąd na błędzie.
Konstruktor klasy to metoda magiczna. Powinna zaczynać się od dwóch podkreśleń. Poza tym warto nadać konstruktorowi modyfikator dostępu publicznego. Czyli coś takiego public function __construct() . Zainstalowałeś już jakieś IDE z podpowiedzią składni np Vscode? Nawet Notpad++ pewnie by ten błąd wyłapał.

Riddle
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10227
1
  1. Pierwsze zasadnicze pytanie: po co dodajesz tutaj klasę? Masz jakiś powód ku temu, czy chcesz sobie popróbować ich używanie więc wrzucasz ją byle gdzie? Bo jeśli tak, to trochę srednio.
  2. Nazwałeś funkcję _construct (zamiast __construct), a więc jest to zwykła funkcja a nie konstruktor.
  3. Funkcja add() jest poza klasą, więc nie jest to metoda w basket.
  4. Nazywaj pola po angielsku, czyli id, price, amount
  5. Polecam nie stosować zamykającego ?>, bo to jest to samo co echo.
  6. Nadmiarowy średnik na końcu deklaracji klasy.
  7. Dodaj formatowanie (czyli wetnij odpowiednie linijki spacjami)
  8. Warto dodać jawne modyfikatory dostępu public, tak jak pisał @jurek1980
BX
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 34
0

Inna sprawa, że add i tak będzie zerowało się w sesji przy każdym wywołaniu :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.