original_string: public function isA($class, $test_class)
      {
          $test_class = $this->normalize($test_class);
          if ($this->classExists($test_class)) {
              return in_array($test_class, $this->getAncestors($class));
          } elseif ($this->interfaceExists($test_class)) {
              return in_array($test_class, $this->getImplements($class));
          } else {
              throw new ClassNotExistException($test_class);
          }
      }
code: public function isA($class, $test_class)
      {
          $test_class = $this->normalize($test_class);
          if ($this->classExists($test_class)) {
              return in_array($test_class, $this->getAncestors($class));
          } elseif ($this->interfaceExists($test_class)) {
              return in_array($test_class, $this->getImplements($class));
          } else {
              throw new ClassNotExistException($test_class);
          }
      }
code_tokens: public function isA ( $ class , $ test_class ) { $ test_class = $ this -> normalize ( $ test_class ) ; if ( $ this -> classExists ( $ test_class ) ) { return in_array ( $ test_class , $ this -> getAncestors ( $ class ) ) ; } elseif ( $ this -> interfaceExists ( $ test_class ) ) { return in_array ( $ test_class , $ this -> getImplements ( $ class ) ) ; } else { throw new ClassNotExistException ( $ test_class ) ; } }
docstring: checks the class is subclass or implements the test class
  
  @param string $class
  @param string $test_class class or interface name
  @return boolean
docstring_tokens: checks the class is subclass or implements the test class