3v4l.org

run code in 300+ PHP versions simultaneously
<?php function userActions(): \Closure { $startUserRecord = static function( string $firstName, string $lastName, string $companyName, string $companyAddress ) { return new class(...func_get_args()) { private $payload = []; private $firstName; private $lastName; private $companyName; private $companyAddress; public function __construct( string $firstName, string $lastName, string $companyName, string $companyAddress ) { $this->payload = func_get_args(); $this->firstName = $firstName; $this->lastName = $lastName; $this->companyName = $companyName; $this->companyAddress = $companyAddress; } public function validate(): array { // Here is where you would actually validate this one message. // Empty array means no validation messages. return []; } public function payload(): array { return $this->payload; } }; }; // Other ones go here, too. $saveUserProfile = static function() { /* ... */ }; $resetUserLogin = static function() { /* ... */ }; $activities = [ 'startUserRecord' => $startUserRecord, 'saveUserProfile ' => $saveUserProfile, 'resetUserLogin ' => $resetUserLogin, ]; return static function(/* autoset as $get */) use($activities) { $get = func_get_args(); $find = static function($name) use(&$get) { return in_array($name, $get); }; $filtered = array_filter($activities, $find, ARRAY_FILTER_USE_KEY); $found = []; // Keep in the same order. foreach($get as $name) { $found[] = $filtered[$name]; } return $found; }; } $fields = [ 'firstName' => 'First Name', 'lastName' => 'Last Name', 'companyName' => 'Company Name', 'companyAddress' => 'Company Address', ]; $userActivities = userActions(); [$startUserRecord] = $userActivities('startUserRecord'); $activity = $startUserRecord(...array_values($fields)); var_dump($fields, $activity->validate(), $activity->payload());

preferences:
51.3 ms | 1732 KiB | 5 Q