original_string: protected function _reflectionCache()
      {
          $class = get_class($this);
          if (isset(self::$_reflectionCache[$class])) {
              return self::$_reflectionCache[$class];
          }
  
          $events = $this->implementedEvents();
          $eventMethods = [];
          foreach ($events as $e => $binding) {
              if (is_array($binding) && isset($binding['callable'])) {
                  /* @var string $callable */
                  $callable = $binding['callable'];
                  $binding = $callable;
              }
              $eventMethods[$binding] = true;
          }
  
          $baseClass = 'Cake\ORM\Behavior';
          if (isset(self::$_reflectionCache[$baseClass])) {
              $baseMethods = self::$_reflectionCache[$baseClass];
          } else {
              $baseMethods = get_class_methods($baseClass);
              self::$_reflectionCache[$baseClass] = $baseMethods;
          }
  
          $return = [
              'finders' => [],
              'methods' => []
          ];
  
          $reflection = new ReflectionClass($class);
  
          foreach ($reflection->getMethods(ReflectionMethod::IS_PUBLIC) as $method) {
              $methodName = $method->getName();
              if (in_array($methodName, $baseMethods) ||
                  isset($eventMethods[$methodName])
              ) {
                  continue;
              }
  
              if (substr($methodName, 0, 4) === 'find') {
                  $return['finders'][lcfirst(substr($methodName, 4))] = $methodName;
              } else {
                  $return['methods'][$methodName] = $methodName;
              }
          }
  
          return self::$_reflectionCache[$class] = $return;
      }
code: protected function _reflectionCache()
      {
          $class = get_class($this);
          if (isset(self::$_reflectionCache[$class])) {
              return self::$_reflectionCache[$class];
          }
  
          $events = $this->implementedEvents();
          $eventMethods = [];
          foreach ($events as $e => $binding) {
              if (is_array($binding) && isset($binding['callable'])) {
                  /* @var string $callable */
                  $callable = $binding['callable'];
                  $binding = $callable;
              }
              $eventMethods[$binding] = true;
          }
  
          $baseClass = 'Cake\ORM\Behavior';
          if (isset(self::$_reflectionCache[$baseClass])) {
              $baseMethods = self::$_reflectionCache[$baseClass];
          } else {
              $baseMethods = get_class_methods($baseClass);
              self::$_reflectionCache[$baseClass] = $baseMethods;
          }
  
          $return = [
              'finders' => [],
              'methods' => []
          ];
  
          $reflection = new ReflectionClass($class);
  
          foreach ($reflection->getMethods(ReflectionMethod::IS_PUBLIC) as $method) {
              $methodName = $method->getName();
              if (in_array($methodName, $baseMethods) ||
                  isset($eventMethods[$methodName])
              ) {
                  continue;
              }
  
              if (substr($methodName, 0, 4) === 'find') {
                  $return['finders'][lcfirst(substr($methodName, 4))] = $methodName;
              } else {
                  $return['methods'][$methodName] = $methodName;
              }
          }
  
          return self::$_reflectionCache[$class] = $return;
      }
code_tokens: protected function _reflectionCache ( ) { $ class = get_class ( $ this ) ; if ( isset ( self :: $ _reflectionCache [ $ class ] ) ) { return self :: $ _reflectionCache [ $ class ] ; } $ events = $ this -> implementedEvents ( ) ; $ eventMethods = [ ] ; foreach ( $ events as $ e => $ binding ) { if ( is_array ( $ binding ) && isset ( $ binding [ 'callable' ] ) ) { /* @var string $callable */ $ callable = $ binding [ 'callable' ] ; $ binding = $ callable ; } $ eventMethods [ $ binding ] = true ; } $ baseClass = 'Cake\ORM\Behavior' ; if ( isset ( self :: $ _reflectionCache [ $ baseClass ] ) ) { $ baseMethods = self :: $ _reflectionCache [ $ baseClass ] ; } else { $ baseMethods = get_class_methods ( $ baseClass ) ; self :: $ _reflectionCache [ $ baseClass ] = $ baseMethods ; } $ return = [ 'finders' => [ ] , 'methods' => [ ] ] ; $ reflection = new ReflectionClass ( $ class ) ; foreach ( $ reflection -> getMethods ( ReflectionMethod :: IS_PUBLIC ) as $ method ) { $ methodName = $ method -> getName ( ) ; if ( in_array ( $ methodName , $ baseMethods ) || isset ( $ eventMethods [ $ methodName ] ) ) { continue ; } if ( substr ( $ methodName , 0 , 4 ) === 'find' ) { $ return [ 'finders' ] [ lcfirst ( substr ( $ methodName , 4 ) ) ] = $ methodName ; } else { $ return [ 'methods' ] [ $ methodName ] = $ methodName ; } } return self :: $ _reflectionCache [ $ class ] = $ return ; }
docstring: Gets the methods implemented by this behavior
  
  Uses the implementedEvents() method to exclude callback methods.
  Methods starting with `_` will be ignored, as will methods
  declared on Cake\ORM\Behavior
  
  @return array
  @throws \ReflectionException
docstring_tokens: Gets the methods implemented by this behavior