Problem z prostą klasą w PHP

0

Witam, mam nastepujace zadanie do wykonania:

Napisać klase Car oraz nastepujace funkcje:

$car1 = new Car("Samochod 1");
$car2 = new Car("Samochod 1");

$car1 ->setColor("zielony");
$car2 ->setColor("czerwony");

$car1->setLength(5.0)
$car1->setLength(1.6);
$car1->setLength(2.0);

$car1->setType("Sport");
$car2->setTpe("city");

$car1->getInfo();
$car2->getInfo();

WYNIK:
Samochod 1:
-kolor zielony
-Wymiar: 5.0 x 1.6 x 2.0
-Typ: sportowy
to samo do drugiego

Zrobilem cos takiego ale w dalszym ciagu nie dziala mi w funkcji getInfo() wypisywanie wymiarow pojazdu. Prosze o pomoc.

<?php class Car { public $color; public $length = array(); public $type; private $name; function __construct($name){ $this->name = $name; } public function setColor($color){ $this->color = $color; return true; } public function setLength($length){ $this->$length[] = $length; return true; } public function setType($type){ $this->type = $type; return true; } public function getInfo(){ echo $this->name.'
'; echo '- kolor '.$this->color.'
'; echo '- wymiary:'.$this->length[0]. ' x ' .$this->length[1].' x '.$this->length[2].'
'; echo '-Typ: '.$this->type.'

'; return true; } } $car1 = new Car("Samochod 1"); $car2 = new Car("Samochod 2"); $car1->setColor("zielony"); $car2->setColor("czerwony"); $car1->setLength(5.0); $car1->setLength(1.6); $car1->setLength(2.0); $car1->setType("Sport"); $car2->setType("city"); $car1->getInfo(); $car2->getInfo(); ?>
0

Domyślam się, że nie działa tylko dla $car2, któremu nie ustawiasz wymiarów.

0

moze sprecyzuje bardziej:
Dla żadnego obiektu nie dziala metoda getInfo() tzn nie wyświetla wymiarow. Sądze że jest źle zapisana metoda setLength() ale właśnie nie wiem gdzie za bardzo.

0

$this->$length[] = $length;

To co pogrubione jest raczej niepotrzebne.

Wystarczyło zajrzeć jakie błędy php pokazuje (czy to error_log, czy na wyjście standardowe przy display_errors = On)

0
public $color;
public $length = array();
public $type;

te pola nie powinny być publiczne, wystarczy w zupełności, że będą prywatne

0
$car1->setLength(5.0);
$car1->setLength(1.6);
$car1->setLength(2.0);

Ustawiasz tylko 3 wymiary, no bo trudno i więcej. Tak więc czy nie można tego wszystkiego zrealizować w jednym wywołaniu?

$car1->setLength(5.0, 1.6, 2.0);

W tym wypadku funkcja wygląda tak:

public function setLength($x, $y, $z) {
$this->$lenx = $x;
$this->$leny = $y;
$this->$lenz = $z;
return true;                
}

Deklarujesz sobie te zmienne:

private $lenx;
private $leny;
private $lenz;

Wywalasz tablice $length i w funkcji masz sobie:

echo '- wymiary:'.$this->lenx. ' x ' .$this->leny.' x '.$this->lenz.'<br>';

1 użytkowników online, w tym zalogowanych: 0, gości: 1