Q:

Doxygen not documenting PHP classes

Doxygen does not generate documentation for my classes. Doxygen parses the files containing the classes and these files appear in the files tab, but there is no documentation of the classes. All the files containing my classes are named XXXX.class.php.
My doxygen settings:
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
DOXYFILE_ENCODING      = UTF-8
PROJECT_NAME           = "Kalandföld Online"
PROJECT_NUMBER         = 1.0
PROJECT_BRIEF          =
PROJECT_LOGO           =
OUTPUT_DIRECTORY       = "C:/Program Files/EasyPHP-5.3.6.0/www/WoA/dev/docs"
CREATE_SUBDIRS         = NO
OUTPUT_LANGUAGE        = English
BRIEF_MEMBER_DESC      = YES
REPEAT_BRIEF           = YES
ABBREVIATE_BRIEF       = "The $name class" \
                         "The $name widget" \
                         "The $name file" \
                         is \
                         provides \
                         specifies \
                         contains \
                         represents \
                         a \
                         an \
                         the
ALWAYS_DETAILED_SEC    = NO
INLINE_INHERITED_MEMB  = YES
FULL_PATH_NAMES        = YES
STRIP_FROM_PATH        =
STRIP_FROM_INC_PATH    =
SHORT_NAMES            = NO
JAVADOC_AUTOBRIEF      = YES
QT_AUTOBRIEF           = NO
MULTILINE_CPP_IS_BRIEF = NO
INHERIT_DOCS           = NO
SEPARATE_MEMBER_PAGES  = NO
TAB_SIZE               = 8
ALIASES                =
TCL_SUBST              =
OPTIMIZE_OUTPUT_FOR_C  = YES
OPTIMIZE_OUTPUT_JAVA   = NO
OPTIMIZE_FOR_FORTRAN   = NO
OPTIMIZE_OUTPUT_VHDL   = NO
EXTENSION_MAPPING      =
MARKDOWN_SUPPORT       = YES
BUILTIN_STL_SUPPORT    = NO
CPP_CLI_SUPPORT        = NO
SIP_SUPPORT            = NO
IDL_PROPERTY_SUPPORT   = YES
DISTRIBUTE_GROUP_DOC   = NO
SUBGROUPING            = YES
INLINE_GROUPED_CLASSES = NO
INLINE_SIMPLE_STRUCTS  = NO
TYPEDEF_HIDES_STRUCT   = NO
SYMBOL_CACHE_SIZE      = 0
LOOKUP_CACHE_SIZE      = 0

#---------------------------------------------------------------------------
# Build related configuration options
#---------------------------------------------------------------------------
EXTRACT_ALL            = NO
EXTRACT_PRIVATE        = YES
EXTRACT_PACKAGE        = YES
EXTRACT_STATIC         = YES
EXTRACT_LOCAL_CLASSES  = YES
EXTRACT_LOCAL_METHODS  = YES
EXTRACT_ANON_NSPACES   = YES
HIDE_UNDOC_MEMBERS     = NO
HIDE_UNDOC_CLASSES     = NO
HIDE_FRIEND_COMPOUNDS  = NO
HIDE_IN_BODY_DOCS      = NO
INTERNAL_DOCS          = NO
CASE_SENSE_NAMES       = YES
HIDE_SCOPE_NAMES       = YES
SHOW_INCLUDE_FILES     = YES
FORCE_LOCAL_INCLUDES   = NO
INLINE_INFO            = YES
SORT_MEMBER_DOCS       = YES
SORT_BRIEF_DOCS        = NO
SORT_MEMBERS_CTORS_1ST = NO
SORT_GROUP_NAMES       = NO
SORT_BY_SCOPE_NAME     = NO
STRICT_PROTO_MATCHING  = NO
GENERATE_TODOLIST      = YES
GENERATE_TESTLIST      = YES
GENERATE_BUGLIST       = YES
GENERATE_DEPRECATEDLIST= YES
ENABLED_SECTIONS       =
MAX_INITIALIZER_LINES  = 300
SHOW_USED_FILES        = YES
SHOW_FILES             = YES
SHOW_NAMESPACES        = YES
FILE_VERSION_FILTER    =
LAYOUT_FILE            =
CITE_BIB_FILES         =

#---------------------------------------------------------------------------
# configuration options related to warning and progress messages
#---------------------------------------------------------------------------
QUIET                  = NO
WARNINGS               = YES
WARN_IF_UNDOCUMENTED   = YES
WARN_IF_DOC_ERROR      = YES
WARN_NO_PARAMDOC       = NO
WARN_FORMAT            = "$file:$line: $text"
WARN_LOGFILE           =

#---------------------------------------------------------------------------
# configuration options related to the input files
#---------------------------------------------------------------------------
INPUT                  = "C:/Program Files/EasyPHP-5.3.6.0/www/WoA"
INPUT_ENCODING         = UTF-8
FILE_PATTERNS          = *.class.php
RECURSIVE              = YES
EXCLUDE                =
EXCLUDE_SYMLINKS       = NO
EXCLUDE_PATTERNS       =
EXCLUDE_SYMBOLS        =
EXAMPLE_PATH           =
EXAMPLE_PATTERNS       = *
EXAMPLE_RECURSIVE      = NO
IMAGE_PATH             =
INPUT_FILTER           =
FILTER_PATTERNS        =
FILTER_SOURCE_FILES    = NO
FILTER_SOURCE_PATTERNS =

#---------------------------------------------------------------------------
# configuration options related to source browsing
#---------------------------------------------------------------------------
SOURCE_BROWSER         = NO
INLINE_SOURCES         = NO
STRIP_CODE_COMMENTS    = YES
REFERENCED_BY_RELATION = NO
REFERENCES_RELATION    = NO
REFERENCES_LINK_SOURCE = YES
USE_HTAGS              = NO
VERBATIM_HEADERS       = YES

#---------------------------------------------------------------------------
# configuration options related to the alphabetical class index
#---------------------------------------------------------------------------
ALPHABETICAL_INDEX     = YES
COLS_IN_ALPHA_INDEX    = 5
IGNORE_PREFIX          =

#---------------------------------------------------------------------------
# configuration options related to the HTML output
#---------------------------------------------------------------------------
GENERATE_HTML          = YES
HTML_OUTPUT            = html
HTML_FILE_EXTENSION    = .html
HTML_HEADER            =
HTML_FOOTER            =
HTML_STYLESHEET        =
HTML_EXTRA_FILES       =
HTML_COLORSTYLE_HUE    = 220
HTML_COLORSTYLE_SAT    = 100
HTML_COLORSTYLE_GAMMA  = 80
HTML_TIMESTAMP         = YES
HTML_DYNAMIC_SECTIONS  = NO
HTML_INDEX_NUM_ENTRIES = 100
GENERATE_DOCSET        = NO
DOCSET_FEEDNAME        = "Doxygen generated docs"
DOCSET_BUNDLE_ID       = org.doxygen.Project
DOCSET_PUBLISHER_ID    = org.doxygen.Publisher
DOCSET_PUBLISHER_NAME  = Publisher
GENERATE_HTMLHELP      = NO
CHM_FILE               =
HHC_LOCATION           =
GENERATE_CHI           = NO
CHM_INDEX_ENCODING     =
BINARY_TOC             = NO
TOC_EXPAND             = NO
GENERATE_QHP           = NO
QCH_FILE               =
QHP_NAMESPACE          = org.doxygen.Project
QHP_VIRTUAL_FOLDER     = doc
QHP_CUST_FILTER_NAME   =
QHP_CUST_FILTER_ATTRS  =
QHP_SECT_FILTER_ATTRS  =
QHG_LOCATION           =
GENERATE_ECLIPSEHELP   = NO
ECLIPSE_DOC_ID         = org.doxygen.Project
DISABLE_INDEX          = NO
GENERATE_TREEVIEW      = NO
ENUM_VALUES_PER_LINE   = 4
TREEVIEW_WIDTH         = 250
EXT_LINKS_IN_WINDOW    = NO
FORMULA_FONTSIZE       = 10
FORMULA_TRANSPARENT    = YES
USE_MATHJAX            = NO
MATHJAX_RELPATH        = http://cdn.mathjax.org/mathjax/latest
MATHJAX_EXTENSIONS     =
SEARCHENGINE           = YES
SERVER_BASED_SEARCH    = NO

#---------------------------------------------------------------------------
# configuration options related to the LaTeX output
#---------------------------------------------------------------------------
GENERATE_LATEX         = NO
LATEX_OUTPUT           = latex
LATEX_CMD_NAME         = latex
MAKEINDEX_CMD_NAME     = makeindex
COMPACT_LATEX          = NO
PAPER_TYPE             = a4
EXTRA_PACKAGES         =
LATEX_HEADER           =
LATEX_FOOTER           =
PDF_HYPERLINKS         = YES
USE_PDFLATEX           = YES
LATEX_BATCHMODE        = NO
LATEX_HIDE_INDICES     = NO
LATEX_SOURCE_CODE      = NO
LATEX_BIB_STYLE        = plain

#---------------------------------------------------------------------------
# configuration options related to the RTF output
#---------------------------------------------------------------------------
GENERATE_RTF           = NO
RTF_OUTPUT             = rtf
COMPACT_RTF            = NO
RTF_HYPERLINKS         = NO
RTF_STYLESHEET_FILE    =
RTF_EXTENSIONS_FILE    =

#---------------------------------------------------------------------------
# configuration options related to the man page output
#---------------------------------------------------------------------------
GENERATE_MAN           = NO
MAN_OUTPUT             = man
MAN_EXTENSION          = .3
MAN_LINKS              = NO

#---------------------------------------------------------------------------
# configuration options related to the XML output
#---------------------------------------------------------------------------
GENERATE_XML           = NO
XML_OUTPUT             = xml
XML_SCHEMA             =
XML_DTD                =
XML_PROGRAMLISTING     = YES

#---------------------------------------------------------------------------
# configuration options for the AutoGen Definitions output
#---------------------------------------------------------------------------
GENERATE_AUTOGEN_DEF   = NO

#---------------------------------------------------------------------------
# configuration options related to the Perl module output
#---------------------------------------------------------------------------
GENERATE_PERLMOD       = NO
PERLMOD_LATEX          = NO
PERLMOD_PRETTY         = YES
PERLMOD_MAKEVAR_PREFIX =

#---------------------------------------------------------------------------
# Configuration options related to the preprocessor
#---------------------------------------------------------------------------
ENABLE_PREPROCESSING   = YES
MACRO_EXPANSION        = NO
EXPAND_ONLY_PREDEF     = NO
SEARCH_INCLUDES        = YES
INCLUDE_PATH           =
INCLUDE_FILE_PATTERNS  =
PREDEFINED             =
EXPAND_AS_DEFINED      =
SKIP_FUNCTION_MACROS   = YES

#---------------------------------------------------------------------------
# Configuration::additions related to external references
#---------------------------------------------------------------------------
TAGFILES               =
GENERATE_TAGFILE       =
ALLEXTERNALS           = NO
EXTERNAL_GROUPS        = YES
PERL_PATH              = /usr/bin/perl

#---------------------------------------------------------------------------
# Configuration options related to the dot tool
#---------------------------------------------------------------------------
CLASS_DIAGRAMS         = NO
MSCGEN_PATH            =
HIDE_UNDOC_RELATIONS   = NO
HAVE_DOT               = NO
DOT_NUM_THREADS        = 0
DOT_FONTNAME           = Helvetica
DOT_FONTSIZE           = 10
DOT_FONTPATH           =
CLASS_GRAPH            = YES
COLLABORATION_GRAPH    = YES
GROUP_GRAPHS           = YES
UML_LOOK               = NO
UML_LIMIT_NUM_FIELDS   = 10
TEMPLATE_RELATIONS     = NO
INCLUDE_GRAPH          = YES
INCLUDED_BY_GRAPH      = YES
CALL_GRAPH             = NO
CALLER_GRAPH           = NO
GRAPHICAL_HIERARCHY    = YES
DIRECTORY_GRAPH        = YES
DOT_IMAGE_FORMAT       = png
INTERACTIVE_SVG        = NO
DOT_PATH               =
DOTFILE_DIRS           =
MSCFILE_DIRS           =
DOT_GRAPH_MAX_NODES    = 50
MAX_DOT_GRAPH_DEPTH    = 0
DOT_TRANSPARENT        = NO
DOT_MULTI_TARGETS      = NO
GENERATE_LEGEND        = YES
DOT_CLEANUP            = YES

An example PHP file:
<?php

/**
 * Store all functions related to the smithing skill.
 */
Class Smithing {

    public static $SMITHING_ITEMS = array(
        //Created itemId, needed resources (id, amount, id, amount) in an array form, required level, xp, created amount
        array(18, array(33, 3, 32, 1), 2, 30, 1, 1),
        array(34, array(33, 3, 32, 1), 1, 30, 1, 1),
        array(35, array(33, 7, 32, 3), 5, 70, 1, 3),
        array(36, array(33, 4, 32, 2), 4, 45, 1, 2),
        array(37, array(33, 4, 32, 2), 3, 45, 1, 2)
    );
    public static $SMELTING_ITEMS = array(
        //Created itemId, needed resources (id, amount, id, amount) in an array form, required level, xp, created amount
        array(33, array(31, 1, 32, 1), 1, 5, 1)
    );
    private $user = null;

    public function __construct($user) {
        $this->user = $user;
    }

    /**
     * Create a smithing item from the requirements.
     * Return:
     * 3 - Not enough turne
     * 2 - Missing resources
     * 1 - Smithing sucessfull
     * 0 - Smithing failed
     * -1 - Error!
     * 
     * @param type $smithingId 
     */
    public function createSmithingItem($smithingId) {
        if ($smithingId >= 0 || $smithingId < count(Smithing::$SMITHING_ITEMS)) {
            $requirements = Smithing::$SMITHING_ITEMS[$smithingId][1];

            if ($requirements[4] >= $this->user->getTurns()) {
                //Check that we have all of the resources
                for ($i = 0; $i < count($requirements); $i+=2) {
                    if (!$this->user->getInventory()->hasItemAmount($requirements[$i], $requirements[$i + 1])) {
                        return 2;
                    }
                }

                //Delete all of the resources
                for ($i = 0; $i < count($requirements); $i+=2) {
                    $this->user->getInventory()->deleteItem($requirements[$i], $requirements[$i + 1]);
                }

                //Calculating chance
                $chance = 50 + ($this->user->getSkills()->getLevel(17) - $requirements[2]) * 10;

                //Give the item and the xp if passed the chance or give only half of the xp
                if ($chance == 100 || $chance > rand(1, 100)) {
                    $this->user->getInventory()->addItem(Smithing::$SMITHING_ITEMS[$smithingId][0], Smithing::$SMITHING_ITEMS[$smithingId][4], true);
                    $this->user->getSkills()->addXP(17, Smithing::$SMITHING_ITEMS[$smithingId][3]);
                    return 1;
                } else {
                    $this->user->getSkills()->addXP(17, Smithing::$SMITHING_ITEMS[$smithingId][3] / 2);
                    return 0;
                }
            } else {
                return 3;
            }
        }
        return -1;
    }

    /**
     * Create a smelting item from the requirements.
     * Return:
     * 2 - Missing resources
     * 1 - Smithing sucessfull
     * 0 - Smithing failed
     * -1 - Error!
     * 
     * @param type $smithingId 
     */
    public function createSmeltingItem($smeltingId) {
        if ($smeltingId >= 0 || $smeltingId < count(Smithing::$SMELTING_ITEMS)) {
            $requirements = Smithing::$SMELTING_ITEMS[$smeltingId][1];

            //Check that we have all of the resources
            for ($i = 0; $i < count($requirements); $i+=2) {
                if (!$this->user->getInventory()->hasItemAmount($requirements[$i], $requirements[$i + 1])) {
                    return 2;
                }
            }

            //Delete all of the resources
            for ($i = 0; $i < count($requirements); $i+=2) {
                $this->user->getInventory()->deleteItem($requirements[$i], $requirements[$i + 1]);
            }

            //Calculating chance
            $chance = 50 + ($this->user->getSkills()->getLevel(17) - $requirements[2]) * 10;

            //Give the item and the xp if passed the chance or give only half of the xp
            if ($chance >= 100 || $chance > rand(1, 100)) {
                $this->user->getInventory()->addItem(Smithing::$SMELTING_ITEMS[$smeltingId][0], Smithing::$SMELTING_ITEMS[$smeltingId][4], true);
                $this->user->getSkills()->addXP(17, Smithing::$SMELTING_ITEMS[$smeltingId][3]);
                return 1;
            } else {
                $this->user->getSkills()->addXP(17, Smithing::$SMELTING_ITEMS[$smeltingId][3] / 2);
                return 0;
            }
        }
        return -1;
    }

    /**
     * Repair all  equipment.
     * 
     * @return int how many durability got repaired
     */
    public function repairAllEquipment() {
        $totalPrice = 0;
        $repairedCount = 0;
        for ($i = 0; $i < 10; $i++) {
            if ($this->user->getEquipment()->getEquipment($i) != 0) {
                $item = ItemManager::getInstance()->getItem($this->user->getEquipment()->getEquipment($i));

                $price = ceil((($item->getPrice() / 100 * 40) / $item->getMaxDurability()) * 1.5);
                $repaired = floor(($this->user->getInventory()->getMoney() - $totalPrice) / $price);
                if ($repaired > $item->getMaxDurability() - $this->user->getEquipment()->getEquipmentDur($i)) {
                    $repaired = $item->getMaxDurability() - $this->user->getEquipment()->getEquipmentDur($i);
                }

                $totalPrice += $repaired * $price;
                $repairedCount += $repaired;
                $this->user->getEquipment()->setEquipmentDur($i, $repaired + $this->user->getEquipment()->getEquipmentDur($i));
            }
        }

        $this->user->getInventory()->deleteMoney($totalPrice);
        $this->user->getSkills()->addXP(17, $repairedCount * 5);

        return $repairedCount;
    }

    /**
     * Repair the equipment on a specific spot.
     * 
     * @param int $slot the slot
     * @return int how many durability got repaired 
     */
    public function repairEquipment($slot) {
        if ($this->user->getEquipment()->getEquipment($slot) != 0) {
            $item = ItemManager::getInstance()->getItem($this->user->getEquipment()->getEquipment($slot));

            if ($this->user->getEquipment()->getEquipmentDur($slot) != $item->getMaxDurability()) {
                $pricePerDur = ceil((($item->getPrice() / 100 * 40) / $item->getMaxDurability()) * 1.5);

                $repaired = floor($this->user->getInventory()->getMoney() / $pricePerDur);
                if ($repaired > $item->getMaxDurability() - $this->user->getEquipment()->getEquipmentDur($slot)) {
                    $repaired = $item->getMaxDurability() - $this->user->getEquipment()->getEquipmentDur($slot);
                }
                $repairPrice = $repaired * $pricePerDur;

                $this->user->getInventory()->deleteMoney($repairPrice);
                $this->user->getSkills()->addXP(17, $repaired * 5);
                $this->user->getEquipment()->setEquipmentDur($slot, $repaired + $this->user->getEquipment()->getEquipmentDur($slot));
            }
        }

        return $repaired;
    }

    /**
     * Repair an item in the inventory.
     * 
     * @param type $item the item's id
     * @param type $dur the item's durability
     * @return int the repaired amount
     */
    public function repairInventory($item, $dur) {
        if ($this->user->getInventory()->hasItemAmount($item, 1, $dur)) {
            $item = ItemManager::getInstance()->getItem($item);
            $pricePerDur = ceil((($item->getPrice() / 100 * 40) / $item->getMaxDurability()) * 1.5);

            $repaired = floor($this->user->getInventory()->getMoney() / $pricePerDur);
            if ($repaired > $item->getMaxDurability() - $dur) {
                $repaired = $item->getMaxDurability() - $dur;
            }
            $repairPrice = $repaired * $pricePerDur;

            $this->user->getInventory()->deleteMoney($repairPrice);
            $this->user->getInventory()->setItemDurability($item->getId(), $dur, ($dur + $repaired));

            $this->user->getSkills()->addXP(17, $repaired * 5);

            return $repaired;
        }
        return 0;
    }

}

?>    

A:

Try using a lower-case c for you class definition, i.e.
class Smithing {
    // Class methods etc. go here.
}

