3v4l.org

run code in 500+ PHP versions simultaneously
<?php class Foo { public string $pub; private string $priv; public function __construct(string $pub, string $priv) { $this->pub = $pub; $this->priv = $priv; } } class Bar extends Foo {} // --- Case 1: identical (same instance) $a = new Foo('hello', 'world'); $b = $a; echo "=== Same instance ===\n"; echo '$a == $b : ' . var_export($a == $b, true) . "\n"; // true echo '$a === $b : ' . var_export($a === $b, true) . "\n"; // true // --- Case 2: equal (same values, different instances) $c = new Foo('hello', 'world'); echo "\n=== Same values, different instances ===\n"; echo '$a == $c : ' . var_export($a == $c, true) . "\n"; // true echo '$a === $c : ' . var_export($a === $c, true) . "\n"; // false // --- Case 3: different values (pub differs) $d = new Foo('other', 'world'); echo "\n=== Different pub ===\n"; echo '$a == $d : ' . var_export($a == $d, true) . "\n"; // false echo '$a === $d : ' . var_export($a === $d, true) . "\n"; // false // --- Case 4: different values (priv differs) $e = new Foo('hello', 'secret'); echo "\n=== Different priv ===\n"; echo '$a == $e : ' . var_export($a == $e, true) . "\n"; // false echo '$a === $e : ' . var_export($a === $e, true) . "\n"; // false // --- Case 5: different classes (same structure, same values) $f = new Bar('hello', 'world'); echo "\n=== Different class (Bar extends Foo), same values ===\n"; echo '$a == $f : ' . var_export($a == $f, true) . "\n"; // false (different classes) echo '$a === $f : ' . var_export($a === $f, true) . "\n"; // false // --- Case 6: clone with a modified property $g = clone $a; $g->pub = 'other'; echo "\n=== Clone with modified pub ===\n"; echo '$a == $g : ' . var_export($a == $g, true) . "\n"; // false echo '$a === $g : ' . var_export($a === $g, true) . "\n"; // false // --- Case 7: unmodified clone $h = clone $a; echo "\n=== Unmodified clone ===\n"; echo '$a == $h : ' . var_export($a == $h, true) . "\n"; // true echo '$a === $h : ' . var_export($a === $h, true) . "\n"; // false

Here you find the average performance (time & memory) of each version. A grayed out version indicates it didn't complete successfully (based on exit-code).

VersionSystem time (s)User time (s)Memory (MiB)
8.5.90.0090.00716.80
8.5.80.0060.00316.97
8.5.70.0350.00716.72
8.5.60.0330.00816.57
8.5.50.0300.01016.83
8.5.40.0280.01216.67
8.5.30.0300.00816.69
8.5.20.0260.01016.61
8.5.10.0310.01016.58
8.5.00.0090.00916.71
8.4.240.0140.00819.72
8.4.230.0150.00619.57
8.4.220.0310.01419.29
8.4.210.0340.00819.27
8.4.200.0270.00819.43
8.4.190.0470.00719.65
8.4.180.0360.01219.50
8.4.170.0380.00519.70
8.4.160.0310.01119.68
8.4.150.0310.01119.73
8.4.140.0090.00817.70
8.4.130.0340.00717.65
8.4.120.0410.00617.53
8.4.110.0370.01017.74
8.4.100.0330.00717.89
8.4.90.0320.01117.69
8.4.80.0330.00917.88
8.4.70.0300.01117.88
8.4.60.0350.01217.95
8.4.50.0340.00917.77
8.4.40.0300.01117.52
8.4.30.0340.01317.65
8.4.20.0370.00817.66
8.4.10.0350.00917.58
8.3.330.0090.01218.50
8.3.320.0130.00818.50
8.3.310.0400.01118.25
8.3.300.0320.01418.28
8.3.290.0340.00918.05
8.3.280.0210.01218.22
8.3.270.0320.00916.54
8.3.260.0320.00916.76
8.3.250.0350.00716.92
8.3.240.0320.01116.64
8.3.230.0330.01016.62
8.3.220.0390.00816.55
8.3.210.0330.00816.56
8.3.200.0340.00816.73
8.3.190.0310.00716.72
8.3.180.0270.00416.70
8.3.170.0280.00516.62
8.3.160.0370.00716.85
8.3.150.0330.01016.52
8.3.140.0330.00816.91
8.3.130.0200.00316.86
8.3.120.0250.01316.42
8.3.110.0250.00816.70
8.3.100.0240.00616.85
8.3.90.0420.00616.30
8.3.80.0260.00616.79
8.3.70.0200.01216.68
8.3.60.0340.00816.63
8.3.50.0270.00816.64
8.3.40.0390.00517.96
8.3.30.0280.00917.98
8.3.20.0280.00817.85
8.3.10.0260.00917.93
8.3.00.0230.01118.04
8.2.320.0110.01119.86
8.2.310.0440.00617.90

preferences:
56.65 ms | 796 KiB | 5 Q