3v4l.org

run code in 300+ PHP versions simultaneously
<?php abstract class ToolSetFactory { protected array $products = []; public function make(string $productName, ...$params): Drawable { if ($product = $this->products[$productName] ?? null) return new $product($params); return new NullProduct(); } } class BasicToolSetFactory extends ToolSetFactory { public function __construct() { $this->products['general'] = GeneralProduct::class; $this->products['arrows'] = ArrowsProduct::class; } } // Interfaces interface Drawable { public function draw(): void; } interface General extends Drawable {} interface Arrows extends Drawable {} // Product classes class GeneralProduct implements General { public function draw(): void { print "Drawing general elements\n"; } // Other methods } class ArrowsProduct implements Arrows { public function draw(): void { print "Drawing arrows elements\n"; } // Other methods } // Client code class BasicToolSet { public function createToolSet(ToolSetFactory $factory): void { $general = $factory->make('general'); $arrows = $factory->make('arrows'); foreach ([$general, $arrows] as $product) { $product->draw(); } } } // Usage $basicToolSetFactory = new BasicToolSetFactory(); $basicToolSet = new BasicToolSet(); $basicToolSet->createToolSet($basicToolSetFactory);
Output for git.master, git.master_jit, rfc.property-hooks
Drawing general elements Drawing arrows elements

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:
26.55 ms | 405 KiB | 5 Q