A simple PHP autoloader that loads class files recursively.
There are several nice fully-featured, PSR-0/PSR-4 compliant autoloaders out there. Many packages such as Composer come with them pre-packaged, but they can also be used independently. Why create yet another with so many truly nice options available? Simplicity. I wanted something simple and basic that I could drop into any project with a basic directory structure and be up and running without the complexities that come with other solutions. I also wanted something that I could release to the Open Source community that would be simple enough for beginners to use and understand. If you're using Composer or Laravel or some other package that includes an autoloader, you should use it. This is for the times when you're not.
This project is aimed at programmers with a basic knowledge of PHP and MySQL. It assumes that you already have:
- A web server running PHP
- A basic understanding of general programming concepts and PHP syntax
Class autoloading, typically referred to simply as "autoloading", is a method of including necessary class files in a project dynamically at runtime as opposed to hard-coding an include statement for each class file dependency in every file. This allows for faster development and less bloated files.
PHP 5 added support for autoloading with the introduction of the __autoload()
function. The spl_autoload_register()
function added in PHP 5.1.2 provided
more flexibility and is considered to be the proper method of implementing
autoloading in PHP today. More recently, PHP 5.3 has added support for
namespaces.
v1.1.3
- Minor updates to documentation.
v1.1.2
- Minor fixes to README.md.
v1.1.1
- Added comment to sample index.php file.
v1.1.0
- Initial release
- PHP 5.3+, Minimum PHP 5.1.2
A working demo of this code is provided in the sample directory. Upload this directory to your webserver and access the index.php page in your web browser.
The MIT License (MIT)
Copyright (c) 2014 Rob Dunham
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
http://opensource.org/licenses/MIT
The code presented here is fully functioning and should not present any issues when used in a production environment. However, server environments and coding practices differ widely and this code should be considered for educational purposes only.
Suggestions and pull requests are always welcome.
An example implementation can be found in the sample directory. The autoload.php file should be placed the topmost directory of your project where class files are located, or in your project's root directory. For best performance, it's best to keep all of your class files in a separate directory away from the rest of your project. This helps to limit unnecessary overhead caused by traversing the file system.
Once the autoload.php file is in place, include it once near the top of your current PHP file.
<?php
// include the autoloader class near the top of your page
include 'classes/Autoloader.php';
Classes can then be loading dynamically without any additional include statements as long as the class file is found in the same directory or in a directory beneath the autoload.php file itself.
By default, the autoloader assumes that you are using the classname.php
file
naming convention. In other words, the class MyObject
would be found in a
file named MyObject.php
. The autoloader is not case-sensitive. Support for
other naming conventions is available. If your naming convention uses file
names such as MyObject.class
or MyObject.class.php
, you can change the
default file extension near the bottom of the Autoloader.php file.
Autoloader::setFileExt('.class.php');