original_string: public function explain(Explainable $explainable, array $options = [])
      {
          if ( ! isset($options['readPreference'])) {
              $options['readPreference'] = $this->readPreference;
          }
  
          if ( ! isset($options['typeMap'])) {
              $options['typeMap'] = $this->typeMap;
          }
  
          $server = $this->manager->selectServer($options['readPreference']);
  
          $operation = new Explain($this->databaseName, $explainable, $options);
  
          return $operation->execute($server);
      }
code: public function explain(Explainable $explainable, array $options = [])
      {
          if ( ! isset($options['readPreference'])) {
              $options['readPreference'] = $this->readPreference;
          }
  
          if ( ! isset($options['typeMap'])) {
              $options['typeMap'] = $this->typeMap;
          }
  
          $server = $this->manager->selectServer($options['readPreference']);
  
          $operation = new Explain($this->databaseName, $explainable, $options);
  
          return $operation->execute($server);
      }
code_tokens: public function explain ( Explainable $ explainable , array $ options = [ ] ) { if ( ! isset ( $ options [ 'readPreference' ] ) ) { $ options [ 'readPreference' ] = $ this -> readPreference ; } if ( ! isset ( $ options [ 'typeMap' ] ) ) { $ options [ 'typeMap' ] = $ this -> typeMap ; } $ server = $ this -> manager -> selectServer ( $ options [ 'readPreference' ] ) ; $ operation = new Explain ( $ this -> databaseName , $ explainable , $ options ) ; return $ operation -> execute ( $ server ) ; }
docstring: Explains explainable commands.
  
  @see Explain::__construct() for supported options
  @see http://docs.mongodb.org/manual/reference/command/explain/
  @param Explainable $explainable  Command on which to run explain
  @param array       $options      Additional options
  @return array|object
  @throws UnsupportedException if explainable or options are not supported by the selected server
  @throws InvalidArgumentException for parameter/option parsing errors
  @throws DriverRuntimeException for other driver errors (e.g. connection errors)
docstring_tokens: Explains explainable commands .