3v4l.org

run code in 300+ PHP versions simultaneously
<?php declare(strict_types=1); namespace Ws\Shared\Users { interface SearchByIdData { public function getId(): int; } abstract class Users { // Add as many abstract methods as needed for any object you need. abstract public function buildSearchByIdData(int $value, string $other): SearchByIdData; public function searchById(int $id, string $otherParam) { $filter = $this->buildSearchByIdData($id, $otherParam); echo 'Do something with ' . get_class($filter) . "\n"; var_dump($filter); } // All other public methods using abstract methods to create objects } } namespace Ws\V1\Users { use Ws\Shared\Users\SearchByIdData as SearchByIdDataInterface; use Ws\Shared\Users\Users as BaseUsers; class SearchByIdDataOption1 { public function __construct(public string $value) {} } class SearchByIdDataOption2 { public function __construct(public string $value) {} } class SearchByIdData implements SearchByIdDataInterface { public function __construct( private int $id, private SearchByIdDataOption1|SearchByIdDataOption2 $option ) {} public function getId(): int { return $this->id; } } class Users extends BaseUsers { public function buildSearchByIdData(int $value, string $other): SearchByIdDataInterface { $option = ($other === 'yes') ? new SearchByIdDataOption1($other) : new SearchByIdDataOption2($other); return new SearchByIdData($value, $option); } } } namespace Ws\V2\Users { use Ws\Shared\Users\SearchByIdData as SearchByIdDataInterface; use Ws\Shared\Users\Users as BaseUsers; class SearchByIdDataOption1 { public function __construct(public string $value) {} } class SearchByIdDataOption2 { public function __construct(public string $value) {} } class SearchByIdData implements SearchByIdDataInterface { public function __construct( private int $id, private SearchByIdDataOption1|SearchByIdDataOption2 $option ) {} public function getId(): int { return $this->id; } } class Users extends BaseUsers { public function buildSearchByIdData(int $value, string $other): SearchByIdDataInterface { $option = ($other === 'yes') ? new SearchByIdDataOption1($other) : new SearchByIdDataOption2($other); return new SearchByIdData($value, $option); } } } namespace Somewhere\Else { // Using v1: $v1Users = new \Ws\V1\Users\Users(); $v1Users->searchById(1, 'yes'); $v1Users->searchById(1, 'maybe'); // Using v2: $v2Users = new \Ws\V2\Users\Users(); $v2Users->searchById(1, 'yes'); $v2Users->searchById(1, 'maybe'); }
Output for 8.1.30 - 8.1.33, 8.2.22 - 8.2.29, 8.3.5 - 8.3.28, 8.4.1 - 8.4.14, 8.5.0 - 8.5.1
Do something with Ws\V1\Users\SearchByIdData object(Ws\V1\Users\SearchByIdData)#3 (2) { ["id":"Ws\V1\Users\SearchByIdData":private]=> int(1) ["option":"Ws\V1\Users\SearchByIdData":private]=> object(Ws\V1\Users\SearchByIdDataOption1)#2 (1) { ["value"]=> string(3) "yes" } } Do something with Ws\V1\Users\SearchByIdData object(Ws\V1\Users\SearchByIdData)#2 (2) { ["id":"Ws\V1\Users\SearchByIdData":private]=> int(1) ["option":"Ws\V1\Users\SearchByIdData":private]=> object(Ws\V1\Users\SearchByIdDataOption2)#3 (1) { ["value"]=> string(5) "maybe" } } Do something with Ws\V2\Users\SearchByIdData object(Ws\V2\Users\SearchByIdData)#4 (2) { ["id":"Ws\V2\Users\SearchByIdData":private]=> int(1) ["option":"Ws\V2\Users\SearchByIdData":private]=> object(Ws\V2\Users\SearchByIdDataOption1)#3 (1) { ["value"]=> string(3) "yes" } } Do something with Ws\V2\Users\SearchByIdData object(Ws\V2\Users\SearchByIdData)#3 (2) { ["id":"Ws\V2\Users\SearchByIdData":private]=> int(1) ["option":"Ws\V2\Users\SearchByIdData":private]=> object(Ws\V2\Users\SearchByIdDataOption2)#4 (1) { ["value"]=> string(5) "maybe" } }
Output for 8.4.15
/bin/php-8.4.15: /usr/lib/libm.so.6: version `GLIBC_2.38' not found (required by /bin/php-8.4.15) /bin/php-8.4.15: /usr/lib/libm.so.6: version `GLIBC_2.35' not found (required by /bin/php-8.4.15) /bin/php-8.4.15: /usr/lib/libc.so.6: version `GLIBC_2.34' not found (required by /bin/php-8.4.15) /bin/php-8.4.15: /usr/lib/libc.so.6: version `GLIBC_2.38' not found (required by /bin/php-8.4.15)
Process exited with code 1.

preferences:
83.64 ms | 408 KiB | 5 Q