PHP newbie - PHP Classes autoloading and Securing
I am interested in learning autoloading, but new to PHP. I am reading the book "PHP in Action" which writes the autoload method like
function __autoload($className) {
include_once __autoloadFilename($className);
}
function __autoloadFilename($className) {
return str_replace('_开发者_JAVA技巧','/',$className).".php";
}
I want to pack these methods in a class. will it be better to pack them in an abstract class?
Or in normal class and including it in index.php?
How effeciently I can use the autoloading feature?
Thanks
Securing an autoloader, ensure:
- That the file you try to load is actually a file.
include
is pretty much likeeval
. For example disallow url inclusion via the php configuration. - That the classname is actually a syntactically correct classname. Could be helpful to secure things ;)
You can also white-list namespaces and/or classnames that are appropriate for your concrete autoloader.
Create a class as an autoloader, you must not take the static way, you can just assign any callback with spl_autoload_register
, so you can register multiple autoloaders.
Some quickly written autoloader class stub:
class MyAutoloader
{
public function __construct()
{
$this->register();
}
public function register()
{
spl_autoload_register(array($this,'autoload'));
}
public function autoload($classname)
{
if ($this->isInvalidClassName($classname)) return;
$file = $this->getFileForClassName($classname);
if ($this->isInalidFile($file)) return;
require $file; // bail out fatally.
}
...
}
$myAutoloader = new MyAutoloader();
It's up to you. I use a dedicated class called Loader with a method called load()
, which I activate with:
spl_autoload_register( 'Utility_Loader::load' );
精彩评论