The classloader is provided by ownCloud and loads all your classes automatically. The only thing left to include by yourself are 3rd party libraries. Those should be loaded in lib/AppInfo/Application.php.
Since ownCloud 9.1 there is a PSR-4 autoloader in place. The namespace
\\OCA\\MyApp is mapped to /apps/myapp/lib/. Afterward, normal PSR-4
rules apply, so a folder is a namespace section in the same casing and
the class name matches the file name.
appid can not be turned into the namespace by upper-casing the
first character, you can specify it in your
providing a field called
namespace. The required namespace is the one
which comes after the top level namespace
OCA\\, e.g.: for
OCA\\MyBeautifulApp\\Some\\OtherClass the needed namespace would be
MyBeautifulApp and would be added to the
info.xml in the following
<?xml version="1.0"?> <info> <namespace>MyBeautifulApp</namespace> <!-- other options here ... --> </info>
A second PSR-4 root is available when running tests.
\\OCA\\MyApp\\Tests is thereby mapped to /apps/myapp/tests/.
The legacy classloader, deprecated since 9.1, is still in place and works like this:
Take the full qualifier of a class
If it starts with
\\OCA, then include the file from the apps directory
Convert all characters to lowercase
Replace \ with /
Prepend /apps because of the
OCAnamespace and include the file
In other words: In order for the
PageController class to be
autoloaded, the class
to be stored in the /apps/myapp/controller/pagecontroller.php