design-patterns/resources/view/patterns/adapter.php

63 lines
1.8 KiB
PHP

<?php
/**
* @package: patterns
* @author: Yevhen Odynets
* @date: 2025-07-03
* @time: 21:21
*/
declare(strict_types = 1);
use Pattern\Structural\Adapter\JsonReport;
use Pattern\Structural\Adapter\JsonToPHPArrayReportAdapter;
use Pattern\Structural\Adapter\PHPArrayReport;
use Pattern\Structural\Adapter\PHPArrayReportInterfaceAdapter;
use Pattern\Structural\Adapter\SerializedReport;
use Pattern\Structural\Adapter\SerializedToPHPArrayReportAdapter;
use Pattern\Structural\Adapter\XMLReport;
use Pattern\Structural\Adapter\XMLToPHPArrayReportAdapter;
use Pattern\Structural\Adapter\YamlReport;
use Pattern\Structural\Adapter\YamlToPHPArrayReportAdapter;
$reports = [
// new YamlReport(),
new PHPArrayReport(),
new XMLReport(),
new SerializedReport(),
new JsonReport(),
];
function client(array $reports): void
{
foreach ($reports as $report) {
$adapter = null;
if ($report instanceof PHPArrayReport) {
$adapter = $report;
} elseif ($report instanceof JsonReport) {
$adapter = new JsonToPHPArrayReportAdapter($report);
} elseif ($report instanceof SerializedReport) {
$adapter = new SerializedToPHPArrayReportAdapter($report);
} elseif ($report instanceof XMLReport) {
$adapter = new XMLToPHPArrayReportAdapter($report);
} elseif ($report instanceof YamlReport) {
$adapter = new YamlToPHPArrayReportAdapter($report);
}
if (! is_null($adapter)) {
echo $adapter::class;
renderView($adapter);
}
}
}
function renderView(PHPArrayReportInterfaceAdapter $adapter): void
{
/** @noinspection ForgottenDebugOutputInspection */
dump($adapter->getData());
}
?><img class="diagram" src="/assets/img/diagrams/adapter.png" alt="Adapter DEsign Pattern Diagram"><?php
client($reports);