3v4l.org

run code in 300+ PHP versions simultaneously
<?php interface Roulette { public function move(); } interface Checkable { public function check(); } interface Rotatable { public function rotate(); } abstract class CircleLoad implements Rotatable, Checkable { protected $charges = null; public function __construct() { $this->setCharges(); } abstract protected function setCharges(); } class SixChargedRevolver extends CircleLoad { CONST CHARGES = 6; protected $loaded = null; protected $current = null; public function __construct() { $this->loaded = mt_rand(1, self::CHARGES); $this->current = 1; } public function check() { return $this->current==$this->loaded; } public function rotate() { $rotations = mt_rand(1, 2*self::CHARGES); $this->current = 1 + $rotations%self::CHARGES; } protected function setCharges() { $this->charges = self::CHARGES; } } abstract class RouletteGame implements Roulette { protected $playable = null; public function setPlayable(CircleLoad $playable) { $this->playable = $playable; } } class RussianRoulette extends RouletteGame { public function move() { $this->playable->rotate(); if($this->playable->check()) { die('Boom..'); } echo 'Click!'; } } class RussianRouletteFactory { public function create() { $playable = new SixChargedRevolver(); $roulette = new RussianRoulette(); $roulette->setPlayable($playable); return $roulette; } } $owner = new RussianRouletteFactory; $roulette = $owner->create(); $roulette->move(); $roulette->move(); $roulette->move(); $roulette->move();
Output for 5.0.2, 5.1.3, 5.4.2, 5.4.35, 5.5.23, 5.5.25, 5.5.31, 5.6.2, 5.6.6, 5.6.9, 5.6.11, 7.2.10, 7.3.1
Click!Click!Click!Boom..
Output for 5.2.3, 5.2.11, 5.2.13, 5.3.1, 5.3.7, 5.3.20, 5.4.3, 5.4.12, 5.4.16, 5.4.20, 5.4.26, 5.4.31, 5.4.41, 5.4.45, 5.5.2, 5.5.8 - 5.5.9, 5.5.13, 5.5.15, 5.5.34, 5.5.38, 5.6.0, 5.6.4, 5.6.19, 5.6.22, 5.6.24, 7.0.0 - 7.0.1, 7.2.1 - 7.2.2, 7.2.4, 7.3.0
Boom..
Output for 5.1.0, 5.2.8, 5.3.11 - 5.3.12, 5.3.22, 5.3.27 - 5.3.28, 5.4.21 - 5.4.22, 5.4.24, 5.4.30, 5.4.34, 5.4.38, 5.5.6 - 5.5.7, 5.5.10 - 5.5.11, 5.5.20, 5.5.37, 5.6.3, 5.6.13, 5.6.18, 5.6.20, 5.6.25, 7.0.3, 7.0.6, 7.0.9, 7.0.14, 7.1.7, 7.2.3, 7.2.9, 7.2.13
Click!Boom..
Output for 5.0.0 - 5.0.1, 5.1.6, 5.2.1 - 5.2.2, 5.2.5 - 5.2.6, 5.2.12, 5.3.3, 5.3.8, 5.3.13 - 5.3.17, 5.3.26, 5.4.4, 5.4.9 - 5.4.10, 5.4.29, 5.4.39, 5.5.0, 5.5.14, 5.6.5, 5.6.7, 5.6.28, 7.0.7, 7.0.10, 7.0.20, 7.1.25, 7.2.11 - 7.2.12
Click!Click!Boom..
Output for 5.0.3 - 5.0.5, 5.1.1 - 5.1.2, 5.1.4 - 5.1.5, 5.2.0, 5.2.4, 5.2.7, 5.2.9 - 5.2.10, 5.2.14 - 5.2.17, 5.3.0, 5.3.2, 5.3.4 - 5.3.6, 5.3.9 - 5.3.10, 5.3.18 - 5.3.19, 5.3.21, 5.3.23 - 5.3.25, 5.3.29, 5.4.0 - 5.4.1, 5.4.5 - 5.4.8, 5.4.11, 5.4.13 - 5.4.15, 5.4.17 - 5.4.19, 5.4.23, 5.4.25, 5.4.27 - 5.4.28, 5.4.32, 5.4.36 - 5.4.37, 5.4.40, 5.4.42 - 5.4.44, 5.5.1, 5.5.3 - 5.5.5, 5.5.12, 5.5.16 - 5.5.19, 5.5.21 - 5.5.22, 5.5.24, 5.5.26 - 5.5.30, 5.5.32 - 5.5.33, 5.5.35 - 5.5.36, 5.6.1, 5.6.8, 5.6.10, 5.6.12, 5.6.14 - 5.6.17, 5.6.21, 5.6.23, 7.0.2, 7.0.4 - 7.0.5, 7.0.8, 7.1.0 - 7.1.6, 7.2.0, 7.2.5 - 7.2.8
Click!Click!Click!Click!
Output for 4.4.2 - 4.4.9
Parse error: syntax error, unexpected T_STRING in /in/tRTS8 on line 3
Process exited with code 255.
Output for 4.3.0 - 4.3.1, 4.3.5 - 4.3.11, 4.4.0 - 4.4.1
Parse error: parse error, unexpected T_STRING in /in/tRTS8 on line 3
Process exited with code 255.
Output for 4.3.2 - 4.3.4
Parse error: parse error in /in/tRTS8 on line 3
Process exited with code 255.

preferences:
171.11 ms | 401 KiB | 232 Q