Jest masa rzeczy do których można się przyczepić!
First of all - vendor'a nie dodajemy do naszych repozytoria.
Aby to naprawić:
touch .gitignore
echo "/vendor/" >> .gitignore
git rm -r --cached vendor/
git add .
git commit -m "No need for vendor"
Przejdźmy do App\RaportGenerator:
W konstruktorze nie powinna znajdować się ta linijka:
echo $generator->makeRaport();
Wzmian powinieneś dodać do RaportGenerator metodę:
public function makeRaport()
{
$this->generator->makeRaport();
}
Tak swoją drogą to nie "raport" a "report", ale będę trzymał się Twojej konwencji z czystego lenistwa.
Czas na App\Abstra\AbstractGenerator
Uważam, że nazwa warstwy Abstra jest komiczna. Zaoszczędziłeś jedną setną milisekundy na ucięciu 2 liter? Nie piszesz w Assemblerze - możesz podawać pełne nazwy t.j. App\Abstract\AbstractGenerator.
Kolejna sprawa - Korzystasz z App\Abstra\AbstractGenerator, a w przestrzeni App\ znajduje się kolejny AbstractGenerator co jest cholernie dezorientujące.
Znowu - W __construct nie powinno znaleźć się $this->getData();. Konstruktor służy do konstruowania obiektu, nie zaoszczędzenia 1 linijki kodu dla wywołania metody.
Czyli dostajemy taki kod:
abstract class AbstractGenerator
{
abstract public function makeRaport();
protected function getData()
{
return Array(
Array(
'id' => 1,
'name' => 'Masło',
'price' => 5.00,
'weight' => 0.1,
'count' => 25,
),
Array(
'id' => 3,
'name' => 'Chleb',
'price' => 2.35,
'weight' => 1,
'count' => 16,
),
Array(
'id' => 6,
'name' => 'Twaróg',
'price' => 1.70,
'weight' => 0.4,
'count' => 25,
),
Array(
'id' => 7,
'name' => 'Mleko',
'price' => 1.40,
'weight' => 1,
'count' => 7,
),
);
}
}
No i ja na Tw. miejscu korzystałbym z nowego zapisu tablic - [].
Czas na App\JsonGenerator:
Po co Ci ten protected $raport?
Nie możesz po prostu:
public function makeRaport()
{
$raport = json_encode($this->getData());
echo "Tworzę raport Json\n";
echo $raport."\n";
}
To samo tyczy się reszty implementacji App\Abstra\AbstarctGenerator.
Czas na App\PlainTextGenerator:
W metodach nie korzystamy z print i echo. Korzystamy z return!
Następnie wyświetlamy sobie za pomocą print zwracaną wartość metody.
Przykład: print makeRaport();
Czas na App\XMLGenerator:
Zadeklarowana zmienna $res nie jest nigdzie używana. Dodatkowo, kod jest b. złożony i sam aby za nim nadążyć skorzystałeś z komentarzy. Lwią część logiki przeniósłbym do metod pomocniczych t.j.
private function doSomethingExplicitlyForTheClass() {}
No i na koniec, bo dopijam już moją poranną kawę, korzystaj z dobrodziejstw PHP 7 i używaj RETURN TYPE DECLARATIONS wraz z dopiskiem:
<?php
declare(strict_types=1);
dla każdego pliku PHP.
Ja sobie ustawiłem IDE aby mi tworzył templatkę klasy już z takim zapisem; jeśli nie korzystasz z IDE spróbuj wyrobić sobie nawyk dopisywania tej linii. Możesz podejść do tego w taki sposób, jakby każdy plik PHP musiał zaczynać się właśnie:
declare(strict_types=1);
Kubek z kawą pusty - zwijam się. :p