3v4l.org

run code in 300+ PHP versions simultaneously
<?php /** * File permissions. */ enum Permission: int { /* Start compatibility */ #[Deprecated('use Permission::None instead', 'Mako 12.2.0')] public const NONE = self::None; #[Deprecated('use Permission::OwnerExecute instead', 'Mako 12.2.0')] public const OWNER_EXECUTE = self::OwnerExecute; #[Deprecated('use Permission::OwnerWrite instead', 'Mako 12.2.0')] public const OWNER_WRITE = self::OwnerWrite; #[Deprecated('use Permission::OwnerExecuteWrite instead', 'Mako 12.2.0')] public const OWNER_EXECUTE_WRITE = self::OwnerExecuteWrite; #[Deprecated('use Permission::OwnerRead instead', 'Mako 12.2.0')] public const OWNER_READ = self::OwnerRead; #[Deprecated('use Permission::OwnerExecuteRead instead', 'Mako 12.2.0')] public const OWNER_EXECUTE_READ = self::OwnerExecuteRead; #[Deprecated('use Permission::OwnerWriteRead instead', 'Mako 12.2.0')] public const OWNER_WRITE_READ = self::OwnerWriteRead; #[Deprecated('use Permission::OwnerFull instead', 'Mako 12.2.0')] public const OWNER_FULL = self::OwnerFull; #[Deprecated('use Permission::GroupExecute instead', 'Mako 12.2.0')] public const GROUP_EXECUTE = self::GroupExecute; #[Deprecated('use Permission::GroupWrite instead', 'Mako 12.2.0')] public const GROUP_WRITE = self::GroupWrite; #[Deprecated('use Permission::GroupExecuteWrite instead', 'Mako 12.2.0')] public const GROUP_EXECUTE_WRITE = self::GroupExecuteWrite; #[Deprecated('use Permission::GroupRead instead', 'Mako 12.2.0')] public const GROUP_READ = self::GroupRead; #[Deprecated('use Permission::GroupExecuteRead instead', 'Mako 12.2.0')] public const GROUP_EXECUTE_READ = self::GroupExecuteRead; #[Deprecated('use Permission::GroupWriteRead instead', 'Mako 12.2.0')] public const GROUP_WRITE_READ = self::GroupWriteRead; #[Deprecated('use Permission::GroupFull instead', 'Mako 12.2.0')] public const GROUP_FULL = self::GroupFull; #[Deprecated('use Permission::PublicExecute instead', 'Mako 12.2.0')] public const PUBLIC_EXECUTE = self::PublicExecute; #[Deprecated('use Permission::PublicWrite instead', 'Mako 12.2.0')] public const PUBLIC_WRITE = self::PublicWrite; #[Deprecated('use Permission::PublicExecuteWrite instead', 'Mako 12.2.0')] public const PUBLIC_EXECUTE_WRITE = self::PublicExecuteWrite; #[Deprecated('use Permission::PublicRead instead', 'Mako 12.2.0')] public const PUBLIC_READ = self::PublicRead; #[Deprecated('use Permission::PublicExecuteRead instead', 'Mako 12.2.0')] public const PUBLIC_EXECUTE_READ = self::PublicExecuteRead; #[Deprecated('use Permission::PublicWriteRead instead', 'Mako 12.2.0')] public const PUBLIC_WRITE_READ = self::PublicWriteRead; #[Deprecated('use Permission::PublicFull instead', 'Mako 12.2.0')] public const PUBLIC_FULL = self::PublicFull; #[Deprecated('use Permission::Full instead', 'Mako 12.2.0')] public const FULL = self::Full; #[Deprecated('use Permission::SpecialSticky instead', 'Mako 12.2.0')] public const SPECIAL_STICKY = self::SpecialSticky; #[Deprecated('use Permission::SpecialSetGid instead', 'Mako 12.2.0')] public const SPECIAL_SETGID = self::SpecialSetGid; #[Deprecated('use Permission::SpecialSetUid instead', 'Mako 12.2.0')] public const SPECIAL_SETUID = self::SpecialSetUid; #[Deprecated('use Permission::FullWithAllSpecial instead', 'Mako 12.2.0')] public const FULL_WITH_ALL_SPECIAL = self::FullWithAllSpecial; /* End compatibility */ // No permissions case None = 0o0000; // Owner permissions case OwnerExecute = 0o0100; case OwnerWrite = 0o0200; case OwnerExecuteWrite = 0o0300; case OwnerRead = 0o0400; case OwnerExecuteRead = 0o0500; case OwnerWriteRead = 0o0600; case OwnerFull = 0o0700; // Group permissions case GroupExecute = 0o0010; case GroupWrite = 0o0020; case GroupExecuteWrite = 0o0030; case GroupRead = 0o0040; case GroupExecuteRead = 0o0050; case GroupWriteRead = 0o0060; case GroupFull = 0o0070; // Public permissions case PublicExecute = 0o0001; case PublicWrite = 0o0002; case PublicExecuteWrite = 0o0003; case PublicRead = 0o0004; case PublicExecuteRead = 0o0005; case PublicWriteRead = 0o0006; case PublicFull = 0o0007; // Full permissions (owner, group, and public) case Full = 0o0777; // Special bits case SpecialSticky = 0o1000; case SpecialSetGid = 0o2000; case SpecialSetUid = 0o4000; // Full permissions (owner, group, and public) with all special bits case FullWithAllSpecial = 0o7777; /** * Calculates sum of the specified permissions. */ public static function calculate(Permission ...$permission): int { $permissions = self::None->value; foreach ($permission as $_permission) { $permissions |= $_permission->value; } return $permissions; } /** * Returns TRUE if the permissions contain the specified permissions and FALSE if not. */ public static function hasPermissions(int $permissions, Permission ...$permission): bool { if ($permissions < self::None->value || $permissions > self::FullWithAllSpecial->value) { throw new InvalidArgumentException(sprintf('The integer [ %s ] does not represent a valid octal between 0o0000 and 0o7777.', $permissions)); } $permission = empty($permission) ? self::None->value : self::calculate(...$permission); if ($permission === self::None->value) { return $permissions === self::None->value; } return ($permissions & $permission) === $permission; } }

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.30.0310.00717.36
8.5.20.0310.01016.67
8.5.10.0380.00616.67
8.5.00.0340.00916.67
8.4.180.0310.01219.64
8.4.170.0350.01219.11
8.4.160.0330.01019.48
8.4.150.0310.01119.75
8.4.140.0350.01317.37
8.4.130.0360.00917.36
8.4.120.0400.00817.33
8.4.110.0370.00817.79
8.4.100.0320.01317.70
8.4.90.0490.00417.68
8.4.80.0410.00517.61
8.4.70.0410.00617.50
8.4.60.0410.00717.51
8.4.50.0370.01017.80
8.4.40.0400.01117.23
8.4.30.0430.00917.57
8.4.20.0440.00617.64
8.4.10.0450.00917.49
8.3.300.0330.00718.25
8.3.290.0150.00318.11
8.3.280.0180.00618.23
8.3.270.0380.00816.67
8.3.260.0380.01016.67
8.3.250.0410.00716.67
8.3.240.0430.00716.67
8.3.230.0370.00716.73
8.3.220.0440.01016.67
8.3.210.0350.00916.67
8.3.200.0340.01016.67
8.3.190.0350.00916.67
8.3.180.0350.00716.67
8.3.170.0370.01016.67
8.3.160.0340.01616.68
8.3.150.0410.01316.67
8.3.140.0360.01016.67
8.3.130.0360.00716.67
8.3.120.0350.00716.67
8.3.110.0330.00916.67
8.3.100.0380.00916.67
8.3.90.0360.01116.67
8.3.80.0400.01016.77
8.3.70.0390.00916.67
8.3.60.0420.00816.68
8.3.50.0430.00416.67
8.3.40.0440.00617.84
8.3.30.0290.00817.89
8.3.20.0280.00917.62
8.3.10.0260.01017.78
8.3.00.0240.01017.70

preferences:
54.56 ms | 696 KiB | 5 Q