original_string: public static function has(array $array, ...$keys): bool
      {
          $key = array_shift($keys);
  
          if (!isset($array[$key])) {
              return false;
          }
  
          if (empty($keys)) {
              return isset($array[$key]);
          }
  
          if (!\is_array($array[$key])) {
              return false;
          }
  
          return self::has($array[$key], ...$keys);
      }
code: public static function has(array $array, ...$keys): bool
      {
          $key = array_shift($keys);
  
          if (!isset($array[$key])) {
              return false;
          }
  
          if (empty($keys)) {
              return isset($array[$key]);
          }
  
          if (!\is_array($array[$key])) {
              return false;
          }
  
          return self::has($array[$key], ...$keys);
      }
code_tokens: public static function has ( array $ array , ... $ keys ) : bool { $ key = array_shift ( $ keys ) ; if ( ! isset ( $ array [ $ key ] ) ) { return false ; } if ( empty ( $ keys ) ) { return isset ( $ array [ $ key ] ) ; } if ( ! \ is_array ( $ array [ $ key ] ) ) { return false ; } return self :: has ( $ array [ $ key ] , ... $ keys ) ; }
docstring: Check an element of array by key and sub-keys
  
  @param array $array
  @param array ...$keys
  
  @return bool
docstring_tokens: Check an element of array by key and sub - keys