Witam, mam stworzone 3 klasy, które dziedziczą po sobie: Car, NewCar, InsuranceCar. W drugim pliku znajduje się formularz, w którym na początku użytkownik ma wybrać jedną z tych trzech opcji. Zważywszy na to, że klasy posiadają rożną ilość pól, to w zależności od wyboru, ma ukazać się kolejny odpowiedni formularz w celu wprowadzenia danych do konstruktora wybranej klasy. Po uzupełnieniu wszystkich pól i przesłaniu drugiego formularza ma ukazać się lista utworzonych obiektów wraz z opisem (funkcja toString). Tu pojawia się mój problem, chciałem stworzyć tablicę przechowywującą te obiekty, ale po przesłaniu formularza wyświetlają się tylko informacje o obiekcie, który właśnie stworzyliśmy. Dodatkowo niezależnie od wyboru klasy, wyświetla się zawartość toString dla klasy Car. Mój kod:
<?php
class Car{
protected static int $ile = 0;
protected $model;
protected $cena;
protected $kurs;
public function __construct(){
self::$ile++;
}
public function __get($property) {
if ($property === 'model') {
return $this->model;
}
if ($property === 'cena'){
return $this->cena;
}
if ($property === 'kurs'){
return $this->kurs;
}
}
public function __set($property, $value) {
if ($property === 'model') {
$this->model = $value;
}
if ($property === 'cena'){
$this->cena = $value;
}
if ($property === 'kurs'){
$this->kurs = $value;
}
}
public function value(){
return $this->cena * $this->kurs;
}
public function __toString(): string
{
return "Ile: " . self::$ile . "\n" .
"Model: $this->model\n".
"Cena: $this->cena\n".
"Kurs: $this->kurs\n";
}
}
class NewCar extends Car{
private $alarm;
private $radio;
private $climatronic;
public function __construct($model, $cena, $kurs, $alarm, $radio, $climatronic)
{
if(is_string($model) && is_numeric($cena) && is_numeric($kurs) && is_bool($alarm) && is_bool($radio) && is_bool($climatronic)) {
self::$ile++;
$this->model = $model;
$this->cena = $cena;
$this->kurs = $kurs;
$this->alarm = $alarm;
$this->radio = $radio;
$this->climatronic = $climatronic;
} else {
die("Podano niewłaściwe wartości");
}
}
public function __get($property) {
if ($property === 'alarm') {
return $this->alarm;
}
if ($property === 'radio'){
return $this->radio;
}
if ($property === 'climatronic'){
return $this->climatronic;
}
}
public function __set($property, $value) {
if ($property === 'alarm') {
$this->alarm = $value;
}
if ($property === 'radio'){
$this->radio = $value;
}
if ($property === 'climatronic'){
$this->climatronic = $value;
}
}
public function value()
{
if($this->alarm == true) {
return ($this->cena + ($this->cena * 0.05)) * $this->kurs;
} elseif ($this->radio == true) {
return ($this->cena + ($this->cena * 0.075)) * $this->kurs;
} elseif ($this->climatronic == true){
return ($this->cena + ($this->cena * 0.1)) * $this->kurs;
} elseif ($this->climatronic == true && $this->radio == true){
return ($this->cena + ($this->cena * 0.175)) * $this->kurs;
} elseif ($this->climatronic == true && $this->alarm == true){
return ($this->cena + ($this->cena * 0.15)) * $this->kurs;
} elseif ($this->radio == true && $this->alarm == true){
return ($this->cena + ($this->cena * 0.08)) * $this->kurs;
} elseif ($this->radio == true && $this->alarm == true && $this->climatronic == true){
return ($this->cena + ($this->cena * 0.18)) * $this->kurs;
return ($this->cena + ($this->cena * 0.18)) * $this->kurs;
}
}
public function __toString(): string
{
return "Ile: " . self::$ile . "\n" .
"Model: $this->model\n".
"Cena: $this->cena\n".
"Kurs: $this->kurs\n".
"alarm: $this->alarm\n".
"radio: $this->radio\n".
"klimatyzacja: $this->climatronic\n";
}
}
class InsuranceCar extends NewCar{
private $firstOwner;
private $years;
public function __get($property)
{
if ($property === 'firstOwner') {
return $this->firstOwner;
}
if ($property === 'years') {
return $this->years;
}
}
public function __set($property, $value) {
if ($property === 'firsOwner') {
$this->firstOwner = $value;
}
if ($property === 'years'){
$this->years = $value;
}
}
public function __construct($model, $cena, $kurs, $alarm, $radio, $climatronic, $firstOwner, $years)
{
if(is_string($model) && is_numeric($cena) && is_numeric($kurs) && is_bool($alarm) && is_bool($radio) && is_bool($climatronic) && is_bool($firstOwner) && is_numeric($years)) {
$this->model = $model;
$this->cena = $cena;
$this->kurs = $kurs;
$this->alarm = $alarm;
$this->radio = $radio;
$this->climatronic = $climatronic;
$this->firstOwner = $firstOwner;
$this->years = $years;
} else {
die("Podano niewłaściwe wartości");
}
}
public function value()
{
if($this->firstOwner){
return $this->cena - (($this->cena * 0.1) * $this->years) - ($this->cena * 0.5);
} else{
return $this->cena - (($this->cena * 0.1) * $this->years);
}
}
}
$cars = array();
if(isset($_POST['model']) && isset($_POST['cena']) && isset($_POST['kurs'])) {
$object = $_POST['model'];
$object = new Car();
$object->__set('model', $_POST['model']);
$object->__set('cena', $_POST['cena']);
$object->__set('kurs', $_POST['kurs']);
array_push($cars, $object);
} elseif(isset($_POST['model']) && isset($_POST['cena']) && isset($_POST['kurs']) && isset($_POST['alarm']) && isset($_POST['radio']) && isset($_POST['klimatyzacja'])){
$object = $_POST['model'];
$object = new NewCar($_POST['model'], $_POST['cena'], $_POST['kurs'], $_POST['alarm'], $_POST['radio'], $_POST['klimatyzacja']);
array_push($cars, $object);
} elseif(isset($_POST['model']) && isset($_POST['cena']) && isset($_POST['kurs']) && isset($_POST['alarm']) && isset($_POST['radio']) && isset($_POST['klimatyzacja']) && isset($_POST['pierwszyWlasciciel']) && isset($_POST['lata']) ){
$object = $_POST['model'];
$object = new InsuranceCar($_POST['model'], $_POST['cena'], $_POST['kurs'], $_POST['alarm'], $_POST['radio'], $_POST['klimatyzacja'], $_POST['pierwszyWlasciciel'], $_POST['lata']);
array_push($cars, $object);
} else {
echo "<p style='color: #ff0817'>Proszę uzupełnić wszystkie pola.</p>";
}
foreach ($cars as $car){
echo"<p>" . $car->__toString() . "</p>";
}
?>
Formularze:
<!DOCTYPE html>
<html lang="pl-PL">
<head>
<meta charset="UTF-8">
<title>Samochody</title>
</head>
<body>
<h2>Wybierz usługę:</h2>
<form action="Formularz.php" method="post">
<select name="chooseService">
<option value="Car">Samochód</option>
<option value="NewCar">Nowy samochód</option>
<option value="InsuranceCar">Ubezpieczenie samochodu</option>
</select>
<p><input type='submit' name="usluga"></p>
</form>
<?php
if(isset($_POST['usluga'])) {
if (isset($_POST['chooseService'])) {
if ($_POST['chooseService'] == "Car") {
echo "<form action='Zad7.9.2.php' method='post'>";
echo "<p>Podaj model: <input type='text' name='model'></p>";
echo "<p>Podaj cenę (€): <input type='number' name='cena'></p>";
echo "<p>Podaj kurs: <input type='text' name='kurs'></p>";
echo "<p><input type='submit'></p>";
echo "</form>";
} elseif ($_POST['chooseService'] == "NewCar") {
echo "<form action='Zad7.9.2.php' method='post'>";
echo "<p>Podaj model: <input type='text' name='model'></p>";
echo "<p>Podaj cenę (€): <input type='number' name='cena'></p>";
echo "<p>Podaj kurs: <input type='text' name='kurs'></p>";
echo "<p>Alarm: <select name='alarm'>" .
"<option value='1'>Tak</option>" .
"<option value='0'>Nie</option>" .
"</select></p>";
echo "<p>Radio: <select name='radio'></p>" .
"<option value='1'>Tak</option>" .
"<option value='0'>Nie</option>" .
"</select></p>";
echo "<p>Klimatyzacja: <select name='klimatyzacja'></p>" .
"<option value='1'>Tak</option>" .
"<option value='0'>Nie</option>" .
"</select></p>";
echo "<p><input type='submit'></p>";
echo "</form>";
} elseif ($_POST['chooseService'] == "InsuranceCar") {
echo "<form action='Zad7.9.2.php' method='post'>";
echo "<p>Podaj model: <input type='text' name='model'></p>";
echo "<p>Podaj cenę (€): <input type='number' name='cena'></p>";
echo "<p>Podaj kurs: <input type='text' name='kurs'></p>";
echo "<p>Alarm: <select name='alarm'>" .
"<option value='1'>Tak</option>" .
"<option value='0'>Nie</option>" .
"</select></p>";
echo "<p>Radio: <select name='radio'></p>" .
"<option value='1'>Tak</option>" .
"<option value='0'>Nie</option>" .
"</select></p>";
echo "<p>Klimatyzacja: <select name='klimatyzacja'></p>" .
"<option value='1'>Tak</option>" .
"<option value='0'>Nie</option>" .
"</select></p>";
echo "<p>Pierwszy właściciel?: <select name='pierwszyWlasciciel'></p>" .
"<option value='1'>Tak</option>" .
"<option value='0'>Nie</option>" .
"</select></p>";
echo "<p>Ile lat?: <input type='number' name='lata'></p>";
echo "<p><input type='submit'></p>";
echo "</form>";
}
} else {
echo "<p style='color: red'>Proszę wybrać opcję</p>";
}
}
?>
</body>
</html>
Byłbym bardzo wdzięczny, gdyby ktoś mógłby mi pomóc i z góry dziękuję.
Edit:
Postanowiłem przechowywać informacje o modelach w ciasteczkach i wyświetlać listę modeli obiektów w oddzielnym pliku. Do każdego modelu samochodu z listy mają pojawić się przyciski "Wyświetl szczegółowe dane" (zapewne za pomocą funkcji toString()), "oblicz cenę" (korzystając z metody value()), "edytuj informacje o samochodzie" oraz "usuń samochód". Czy ktoś były w stanie pomóc mi w skonstruowaniu tak działających przycisków? Nie do końca wiem jak po kliknięciu skrypt ma wybrać akurat dane ciasteczko, odwołać się do danego obiektu i wyświetlić np. informacje o nim. Z góry dziękuję