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 git.master, git.master_jit, rfc.property-hooks
float(56088) float(10) string(13) "Shush! Shush!"

This tab shows result from various feature-branches currently under review by the php developers. Contact me to have additional branches featured.

Active branches

Archived branches

Once feature-branches are merged or declined, they are no longer available. Their functionality (when merged) can be viewed from the main output page


preferences:
27.61 ms | 405 KiB | 5 Q