<?php
interface ConfigValueInterface
{
public function __toString();
}
interface ConfigWriterInterface
{
public function write(ConfigValueInterface $value);
}
class WriteManager
{
protected $writers = [];
public function addWriter(ConfigWriterInterface $writer, $value_class)
{
$this->writers[$value_class] = $writer;
}
public function write(ConfigValueInterface $value)
{
$class = get_class($value);
if (isset($this->writers[$class])) {
$this->writers[$class]->write($value);
}
}
}
class BaseConfigValue implements ConfigValueInterface
{
public $storage_location;
}
class BaseConfigWriter implements ConfigWriterInterface
{
public function write(BaseConfigValue $value)
{
echo "writing to {$value->storage_location}";
}
}
// Set up manager
$manager = new WriteManager();
$manager->addWriter(new BaseConfigWriter, BaseConfigValue::class);
// $value = $generator->generate();
$manager->write($value);
Fatal error: Class BaseConfigValue contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (ConfigValueInterface::__toString) in /in/RpMVW on line 35
Process exited with code 255.
Output for 5.5.0 - 5.5.38, 5.6.0 - 5.6.40
Fatal error: Class BaseConfigValue contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (ConfigValueInterface::__toString) in /in/RpMVW on line 40
Process exited with code 255.