On conseille toujours de séparer les classes dans différents fichiers. Le problème c'est que l'on est obligé ensuite de faire beaucoup de require pour charger nos différentes classes. Heureusement l'autoloading nous permet de reméditer à ce problème en incluant les classes dès que l'on en a besoin.

La principe de base est de créer une fonction __autoload qui permettra à PHP de savoir comment include nos classes

function __autoload($class_name){
    require('class/' . $class_name . '.php'); 
}

Le problème de cette méthode c'est qu'on ne peut pas avoir plusieurs fois la même fonction et on ne peut donc pas créer plusieurs autoloader. Heureusement, il est possible de créer et d'enregistrer des fonctions manuellement en utilisant spl_autoload_register

/**
 * Class Autoloader
 */
class Autoloader{

    /**
     * Enregistre notre autoloader
     */
    static function register(){
        spl_autoload_register(array(__CLASS__, 'autoload'));
    }

    /**
     * Inclue le fichier correspondant à notre classe
     * @param $class string Le nom de la classe à charger
     */
    static function autoload($class){
        require 'class/' . $class . '.php';
    }

}

On utilise ici une classe avec des méthodes statique pour une meilleur organisation. On peut alors lancer notre autoloader simplement.

require 'autoloader.php'; 
Autoloader::register();