Framework SuperObject was my first attempt at a lightweight PHP framework. It is here for historical purposes, and has been replaced by CodeScape Framework. What follows is the content of my original project page for it.
The Framework SuperObject is a simple, lightweight and extensible framework object I've developed initially for use at YSTV, however there is no reason it cannot be used as a basis for any PHP-based site.
The FSO source can be checked out from the Git repository:
git clone git://git.codescape.net/fso.git
// Load the FSO class require_once('/path/to/fso.php'); // Get a reference to the FSO object $fso =& FSO::get_instance(); // ... or ... $fso =& get_instance();
You can then get to any loaded module by using
$fso->mymodule;
You can load modules in one of several ways:
// Load module 'MyModule' at $fso->mymodule FSO::load_module('MyModule'); // Load module with arguments to the __init() method FSO::load_module('MyModule', array('arg1', 'arg2')); // Load module 'MyModule' at $fso->foo FSO::load_module('MyModule', null, 'foo'); // Load module 'MyModule' from a different path FSO::load_module('MyModule', null, null, '/path/to/module/dir'); // Or load multiple modules FSO::load_modules(array( array('MyModule', null, 'myalias'), array('AnotherModule', array('init', 'args', 'are', 'fun')) ));
Modules can also be accessed in many ways:
// When loading the module $mymodule =& FSO::load_module('MyModule'); // From the FSO object $fso =& FSO::get_instance(); $fso->mymodule->somefunction(); // Reference the module with another variable $mymodule =& $fso->mymodule; // ... or ... $mymodule =& FSO::get_module('mymodule');
You can access any module via any other module:
$mymodule->othermodule->somefunction();
Finally, if necessary you can load a module without actually making it part of the superobject, however it will still have access to the rest of FSO via $this->module:
$mymodule =& FSO::make_module('MyModule', array('some', 'args'));
You can access any module from within any other module by using $this->mymodule. If you have object variables which might interfere with this, you can also access other modules with $this->FSO->mymodule.
Note: overloading __get() will stop $this->mymodule and $mymodule->othermodule types of access from working. You will still be able to use $this->FSO->mymodule.
To create a module for FSO, create a file with the same name as the class which follows this format:
if ( !class_exists('FSO') ) die('Framework SuperObject base class must be loaded to use its modules!'); class ClassName extends FSO_Module { public function __construct() { parent::__construct(); // Stuff to do when the module is initialized } // Module functions go here }
Module are not completely limited to this format—extending FSO_Module is merely a convenience to get access to all other modules with $this->mymodule syntax. If you don't need this, you can opt to not extend FSO_Module, and if you want remove the first two lines too.