Mam taki przykład poniżej: Klasa Logger, interface interFile, Klasa abstracyjna File, i dwie klasy dziedziczące po klasie abstracyjnej o nazwach csvFile i aviFile.
Obie klasy mają za zadanie logować sobie błędy tylko :) Pytanie mam następujące, ponieważ ćwiczę sobie dziedziczenie itp czy rozszerzanie klasy abstrakcyjnej o interfejs ma sens? Czy lepiej zrobić metodę abstrakcyjną getName() w klasie abstrakcyjnej?
Nie wiem za bardzo w jakich sytuacjach stosować interfejsy a w jakich metody abstrakcyjne
class Logger
{
private $message = '';
public function setMsg($msg)
{
$this->message = $msg;
}
public function makeLog()
{
echo $this->message;
}
}
interface interFile
{
public function getName();
}
abstract class File implements interFile
{
private $logger;
public function __construct()
{
$this->logger = new Logger();
}
public function LogError($message)
{
$this->logger->setMsg('Start log data from ' . $this->getName() . ' -> message: ' . $message);
$this->logger->makeLog();
}
}
class csvFile extends File
{
public function getName(): string
{
return 'file .csv';
}
}
class aviFile extends File
{
public function getName(): string
{
return 'file .avi';
}
}
$testCsv = new csvFile();
$testCsv->LogError('im logged message from csv');
$testAvi = new aviFile();
$testAvi->LogError('im logged message from avi');