AsyncClass.php 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. <?php
  2. namespace tw\async\tasks;
  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. /**
  25. * 异步调用类
  26. *
  27. * @param string $classname: 类名,包含完整命名空间
  28. * @param array $classArgs: 初始化类参数
  29. * @param string $methodName: 函数名称
  30. * @param array $methodArgs: 函数参数
  31. * @return bool
  32. */
  33. public static function push(string $className, array $classArgs, string $methodName, array $methodArgs)
  34. {
  35. $inst = new self();
  36. return $inst->put([
  37. 'class' => $className,
  38. 'classArgs' => $classArgs,
  39. 'method' => $methodName,
  40. 'methodArgs' => $methodArgs,
  41. ]);
  42. }
  43. }