AsyncClass.php 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. <?php
  2. namespace crmeb\services\async\task;
  3. use ReflectionClass;
  4. class AsyncClass extends Task
  5. {
  6. public function getCmd():string
  7. {
  8. return 'async_class';
  9. }
  10. protected function _exec(array $params)
  11. {
  12. $className = $params['class'] ?? '';
  13. $classArgs = $params['classArgs'] ?? [];
  14. $methodName = $params['method'] ?? '';
  15. $methodArgs = $params['methodArgs'] ?? [];
  16. $class = new ReflectionClass($className);
  17. $method = $class->getMethod($methodName);
  18. if ($method->isStatic()) {
  19. return $method->invokeArgs(null, $methodArgs);
  20. }
  21. $inst = $class->newInstanceArgs($classArgs);
  22. return $method->invokeArgs($inst, $methodArgs);
  23. }
  24. public static function push(string $className, array $classArgs, string $methodName, array $methodArgs)
  25. {
  26. $inst = new self();
  27. return $inst->put([
  28. 'class' => $className,
  29. 'classArgs' => $classArgs,
  30. 'method' => $methodName,
  31. 'methodArgs' => $methodArgs,
  32. ]);
  33. }
  34. }