getServiceObjectStatically() public static method

If none found, an exception is thrown this method is static so that it can be used also by the discovery service '__' are replaced by '/' to help the client generator support packages without messing with folders and the like the service object can either be in the global namespace or in the namespace suggested by the name. For example a call to Sub1/Sub2/NamespaceTestService will load the PHP file in Sub1/Sub2/NamespaceTestService, and return an instance of either NamespaceTestService or Sub1\Sub2\NamespaceTestService
public static getServiceObjectStatically ( type $serviceName, array $serviceFolders, array $serviceNames2ClassFindInfo ) : Object
$serviceName type
$serviceFolders array
$serviceNames2ClassFindInfo array
return Object service object
 /**
  * does the actual collection of data about available services
  * @return array of AmfphpDiscovery_ServiceInfo
  */
 public function discover()
 {
     $availableServiceNames = $this->getAvailableServiceNames(self::$serviceFolderPaths, self::$serviceNames2ClassFindInfo);
     $ret = array();
     foreach ($availableServiceNames as $availableServiceName) {
         $serviceObject = Amfphp_Core_Common_ServiceRouter::getServiceObjectStatically($availableServiceName, self::$serviceFolderPaths, self::$serviceNames2ClassFindInfo);
         $reflectionObj = new ReflectionObject($serviceObject);
         $availablePublicMethods = $reflectionObj->getMethods(ReflectionMethod::IS_PUBLIC);
         $methods = array();
         foreach ($availablePublicMethods as $methodDescriptor) {
             $availableMethodName = $methodDescriptor->name;
             if (substr($availableMethodName, 0, 1) == '_') {
                 //methods starting with a '_' as they are reserved, so filter them out
                 continue;
             }
             $parameters = array();
             $method = $reflectionObj->getMethod($availableMethodName);
             $parameterDescriptors = $method->getParameters();
             foreach ($parameterDescriptors as $parameterDescriptor) {
                 $availableParameterName = $parameterDescriptor->name;
                 $type = '';
                 if ($parameterDescriptor->getClass()) {
                     $type = $parameterDescriptor->getClass()->name;
                 }
                 $parameterInfo = new AmfphpDiscovery_ParameterDescriptor($availableParameterName, $type);
                 $parameters[] = $parameterInfo;
             }
             $methodInfo = new AmfphpDiscovery_MethodDescriptor($availableMethodName, $parameters);
             $methods[$availableMethodName] = $methodInfo;
         }
         $serviceInfo = new AmfphpDiscovery_ServiceDescriptor($availableServiceName, $methods);
         $ret[$availableServiceName] = $serviceInfo;
     }
     //note : filtering must be done at the end, as for example excluding a Vo class needed by another creates issues
     foreach ($ret as $serviceName => $serviceObj) {
         foreach (self::$excludePaths as $excludePath) {
             if (strpos($serviceName, $excludePath) !== false) {
                 unset($ret[$serviceName]);
                 break;
             }
         }
     }
     return $ret;
 }
 /**
  * does the actual collection of data about available services
  * @return array of AmfphpDiscovery_ServiceInfo
  */
 public function discover()
 {
     $serviceNames = $this->getServiceNames(self::$serviceFolders, self::$serviceNames2ClassFindInfo);
     $ret = array();
     foreach ($serviceNames as $serviceName) {
         $serviceObject = Amfphp_Core_Common_ServiceRouter::getServiceObjectStatically($serviceName, self::$serviceFolders, self::$serviceNames2ClassFindInfo);
         $objR = new ReflectionObject($serviceObject);
         $objComment = $this->formatComment($objR->getDocComment());
         if (false !== strpos($objComment, '@amfphpHide')) {
             //methods including @amfHide should not appear in the back office but should still be accessible.
             continue;
         }
         $methodRs = $objR->getMethods(ReflectionMethod::IS_PUBLIC);
         $methods = array();
         foreach ($methodRs as $methodR) {
             $methodName = $methodR->name;
             if (substr($methodName, 0, 1) == '_') {
                 //methods starting with a '_' as they are reserved, so filter them out
                 continue;
             }
             $parameters = array();
             $paramRs = $methodR->getParameters();
             $methodComment = $this->formatComment($methodR->getDocComment());
             if (false !== strpos($methodComment, '@amfphpHide')) {
                 //methods including @amfHide should not appear in the back office but should still be accessible.
                 continue;
             }
             $parsedMethodComment = $this->parseMethodComment($methodComment);
             foreach ($paramRs as $paramR) {
                 $parameterName = $paramR->name;
                 //get type from type hinting or from parsed method comment. type hinting has priority
                 $type = '';
                 //get example from parsed method comment only
                 $example = '';
                 if (isset($parsedMethodComment['param'][$parameterName])) {
                     $paramMeta = $parsedMethodComment['param'][$parameterName];
                     if (isset($paramMeta['type'])) {
                         $type = $paramMeta['type'];
                     }
                     if (isset($paramMeta['example'])) {
                         $example = $paramMeta['example'];
                     }
                 }
                 try {
                     //this code will throw an exception saying that the class does not exist, only if the class is a namespace.
                     //in that case there's not much that can be done, so just ignore type.
                     if ($paramR->getClass()) {
                         $type = $paramR->getClass()->name;
                     }
                 } catch (Exception $e) {
                 }
                 $parameterInfo = new AmfphpDiscovery_ParameterDescriptor($parameterName, $type, $example);
                 $parameters[] = $parameterInfo;
             }
             //get return from parsed return comment if exists
             $return = '';
             if (isset($parsedMethodComment['return'])) {
                 $return = $parsedMethodComment['return'];
             }
             $methods[$methodName] = new AmfphpDiscovery_MethodDescriptor($methodName, $parameters, $methodComment, $return);
         }
         $ret[$serviceName] = new AmfphpDiscovery_ServiceDescriptor($serviceName, $methods, $objComment);
     }
     //note : filtering must be done at the end, as for example excluding a Vo class needed by another creates issues
     foreach ($ret as $serviceName => $serviceObj) {
         foreach (self::$excludePaths as $excludePath) {
             if (strpos($serviceName, $excludePath) !== false) {
                 unset($ret[$serviceName]);
                 break;
             }
         }
     }
     return $ret;
 }
 /**
  * does the actual collection of data about available services
  * @return array of AmfphpDiscovery_ServiceInfo
  */
 public function discover()
 {
     $serviceNames = $this->getServiceNames(self::$serviceFolderPaths, self::$serviceNames2ClassFindInfo);
     $ret = array();
     foreach ($serviceNames as $serviceName) {
         $serviceObject = Amfphp_Core_Common_ServiceRouter::getServiceObjectStatically($serviceName, self::$serviceFolderPaths, self::$serviceNames2ClassFindInfo);
         $objR = new ReflectionObject($serviceObject);
         $objComment = $objR->getDocComment();
         $methodRs = $objR->getMethods(ReflectionMethod::IS_PUBLIC);
         $methods = array();
         foreach ($methodRs as $methodR) {
             $methodName = $methodR->name;
             if (substr($methodName, 0, 1) == '_') {
                 //methods starting with a '_' as they are reserved, so filter them out
                 continue;
             }
             $parameters = array();
             $paramRs = $methodR->getParameters();
             $methodComment = $methodR->getDocComment();
             $parsedMethodComment = $this->parseMethodComment($methodComment);
             foreach ($paramRs as $paramR) {
                 $parameterName = $paramR->name;
                 $type = '';
                 if ($paramR->getClass()) {
                     $type = $paramR->getClass()->name;
                 } else {
                     if (isset($parsedMethodComment['param'][$parameterName])) {
                         $type = $parsedMethodComment['param'][$parameterName];
                     }
                 }
                 $parameterInfo = new AmfphpDiscovery_ParameterDescriptor($parameterName, $type);
                 $parameters[] = $parameterInfo;
             }
             $methods[$methodName] = new AmfphpDiscovery_MethodDescriptor($methodName, $parameters, $methodComment, $parsedMethodComment['return']);
         }
         $ret[$serviceName] = new AmfphpDiscovery_ServiceDescriptor($serviceName, $methods, $objComment);
     }
     //note : filtering must be done at the end, as for example excluding a Vo class needed by another creates issues
     foreach ($ret as $serviceName => $serviceObj) {
         foreach (self::$excludePaths as $excludePath) {
             if (strpos($serviceName, $excludePath) !== false) {
                 unset($ret[$serviceName]);
                 break;
             }
         }
     }
     return $ret;
 }