3v4l.org

run code in 300+ PHP versions simultaneously
<?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());
Output for 8.1.23 - 8.1.33, 8.2.10 - 8.2.29, 8.3.0 - 8.3.25, 8.4.1 - 8.4.12
float(56088) float(10) string(13) "Shush! Shush!"
Output for 7.2.0 - 7.2.34, 7.3.0 - 7.3.24, 7.4.0 - 7.4.12
Parse error: syntax error, unexpected '=>' (T_DOUBLE_ARROW) in /in/9D9LU on line 131
Process exited with code 255.

preferences:
81.64 ms | 407 KiB | 5 Q