Пытаюсь на простейшем базовом примере реализовать
Factory Method, но методы
log()
в классах
FileLogger
и
StdoutLogger
просто пропускаются.
index.php
spl_autoload_register(function ($class_name) {
include $class_name . '.php';
});
function clientCode(LoggerFactory $creator)
{
$creator->createLogger("hello");
}
clientCode(new FileLoggerFactory("uml\uml.txt"));
clientCode(new StdoutLoggerFactory("uml\uml.txt2"));
Logger.php
interface Logger
{
public function log(string $message);
}
LoggerFactory.php
interface LoggerFactory
{
public function createLogger(): Logger;
}
FileLoggerFactory.php
class FileLoggerFactory implements LoggerFactory
{
private $filePath;
public function __construct(string $filePath)
{
$this->filePath = $filePath;
}
public function createLogger(): Logger
{
return new FileLogger($this->filePath);
}
}
StdoutLoggerFactory.php
class StdoutLoggerFactory implements LoggerFactory
{
public function __construct()
{
}
public function createLogger(): Logger
{
return new StdoutLogger();
}
}
FileLogger.php
class FileLogger implements Logger
{
private $filePath;
public function __construct(string $filePath)
{
$this->filePath = $filePath;
}
// этот метод не работает
public function log(string $message)
{
echo "message: $message </br>";
}
}
StdoutLogger.php
class StdoutLogger implements Logger
{
public function __construct()
{
}
// этот метод не работает
public function log(string $message)
{
echo "message: $message";
}
}
Почему не исполняются методы
log()
?
Как заставить их запускаться?