Q:

How do I add an option that sets a flag to a document class?

I want to add an option that sets a flag to a document class. That is, I want to be able to type
\documentclass[foo]{class}

and get one type of behavior, and type
\documentclass{class}

to get a different type of behavior. I'm thinking I should do it like this in the class file:
\newif\if@foo
\@foofalse
...
\DeclareOption{foo}{\@footrue}
...
\if@foo
...
\else
...
\fi

Will this work? Could this cause a problem if a package I use in the document also has a \newif\if@foo in it?

A:

The LaTeX2e for class and package writers contains some examples of this within section 3.3 Declaring options (p 12). It pertains to the declaration of package and class options. The following snippets are taken from there:

An option is declared as follows:
\DeclareOption{<option>}{<code>}

For example, the dvips option (slightly simplied) to the graphics
  package is implemented as:
\DeclareOption{dvips}{\input{dvips.def}}

This means that when an author writes \usepackage[dvips]{graphics},
  the file dvips.def is loaded. As another example, the a4paper
  option is declared in the article class to set the \paperheight
  and \paperwidth lengths:
\DeclareOption{a4paper}{%
  \setlength{\paperheight}{297mm}%
  \setlength{\paperwidth}{210mm}%
}

Sometimes a user will request an option which the class or package has
  not explicitly declared. By default this will produce a warning (for
  classes) or error (for packages); this behaviour can be altered as
  follows:
\DeclareOption*{<code>}

For example, to make the package fred produce a warning rather than
  an error for unknown options, you could specify:
\DeclareOption*{%
  \PackageWarning{fred}{Unknown option `\CurrentOption'}%
}

Then, if an author writes \usepackage[foo]{fred}, they will get a
  warning
Package fred Warning: Unknown option `foo'.

Subsequent sections contain some examples of classes constructed from others, which would be good to review.
Using options that are common to other packages could be problematic. However, since you have a choice over the boolean (or macros) associated with the option, choose it to be unique to your class. Authors typically include some form of package reference in the macros. For example, the tufte-latex bundle prepends most commands and booleans with @tufte to avoid possible clashes.

