3v4l.org

run code in 200+ PHP versions simultaneously
<?php interface Employee {} class SteelFactoryEmployee implements Employee {} class CarsFactoryEmployee implements Employee {} interface Factory { public function hire(Employee $employee): bool; } class SteelFactory implements Factory { public function hire(Employee $employee): bool { if (! $context instanceof SteelFactoryEmployee) { throw new InvalidArgumentException('Employee should be ' . SteelFactoryEmployee::class); } return true; } } class CarsFactory implements Factory { public function hire(Employee $employee): bool { if (! $context instanceof CarsFactoryEmployee) { throw new InvalidArgumentException('Employee should be ' . CarsFactoryEmployee::class); } return true; } } class EmploymentDepartment { public function hireNewEmployee(Factory $factory, Employee $employee): void { $factory->hire($employee); } } $someNewEmployee = new SteelFactoryEmployee(); $someFactory = new SteelFactory(); $employmentDepartment = new EmploymentDepartment(); $employmentDepartment->hireNewEmployee($someFactory, $someNewEmployee);
based on RtM7Z
Output for 7.1.26 - 7.4.0
Notice: Undefined variable: context in /in/ajgqR on line 17 Fatal error: Uncaught InvalidArgumentException: Employee should be SteelFactoryEmployee in /in/ajgqR:18 Stack trace: #0 /in/ajgqR(41): SteelFactory->hire(Object(SteelFactoryEmployee)) #1 /in/ajgqR(49): EmploymentDepartment->hireNewEmployee(Object(SteelFactory), Object(SteelFactoryEmployee)) #2 {main} thrown in /in/ajgqR on line 18
Process exited with code 255.