- var_dump: documentation ( source)
<?php
interface Forest
{
public function treesHeight(): float;
}
final class EarthForest implements Forest
{
public function treesHeight(): float
{
return 123 * 456;
}
}
interface Plains
{
public function windPower(): float;
}
final class EarthPlains implements Plains
{
public function windPower(): float
{
return 10;
}
}
final class MarsPlains implements Plains
{
public function windPower(): float
{
return 250;
}
}
interface Sea
{
public function noise(): string;
}
final class EarthSea implements Sea
{
public function noise(): string
{
return 'Shush! Shush!';
}
}
interface TerrainFactory
{
public function makeSea(): Sea;
public function makeForest(): Forest;
public function makePlains(): Plains;
}
final class EarthTerrainFactory implements TerrainFactory
{
public function makeForest(): EarthForest
{
return new EarthForest();
}
public function makePlains(): EarthPlains
{
return new EarthPlains();
}
public function makeSea(): EarthSea
{
return new EarthSea();
}
}
// boilerplate code for null case
final class NullForest implements Forest
{
public function treesHeight(): float
{
return 0.;
}
}
final class NullPlains implements Plains
{
public function windPower(): float
{
return 0.;
}
}
final class NullSea implements Sea
{
public function noise(): string
{
return '';
}
}
final class NullTerrainFactory implements TerrainFactory
{
public function makeForest(): NullForest
{
return new NullForest();
}
public function makePlains(): NullPlains
{
return new NullPlains();
}
public function makeSea(): NullSea
{
return new NullSea();
}
}
// end boilerplate code
class TerrainFactoryFactory
{
public function make(string $type)
{
return match($type) {
'earth' => new EarthTerrainFactory(),
default => new NullTerrainFactory(),
};
}
}
$type = 'earth';
$factoryFactory = new TerrainFactoryFactory();
$terrainFactory = $factoryFactory->make($type);
$forest = $terrainFactory->makeForest();
$plains = $terrainFactory->makePlains();
$sea = $terrainFactory->makeSea();
var_dump($forest->treesHeight());
var_dump($plains->windPower());
var_dump($sea->noise());