Inhoudsopgave
The Zend_Loader class includes methods to help you load files dynamically.
Zend_Loader vs. require_once() | |
---|---|
The Zend_Loader methods are best used if the filename you need to
load is variable. For example, if it is based on a parameter from
user input or method argument. If you are loading a file or a
class whose name is constant, there is no benefit to using
Zend_Loader over using traditional PHP functions such as
|
The static method Zend_Loader::loadFile()
loads a PHP
file. The file loaded may contain any PHP code.
The method is a wrapper for the PHP function
include()
.
This method throws Zend_Exception
on failure, for example
if the specified file does not exist.
Voorbeeld 17.1. Example of loadFile() method
<?php Zend_Loader::loadFile($filename, $dirs=null, $once=false) ?>
The $filename
argument specifies the filename to load,
which must not contain any path information.
A security check is performed on $filename
.
The $filename
may only contain alphanumeric characters,
dashes ("-"), underscores ("_"), or periods (".").
No such restriction is placed on the $dirs
argument.
The $dirs
argument specifies directories to search for
the file. If NULL
, only the include_path
is searched. If a string or an array, the directory or directories
specified will be searched, and then the include_path
.
The $once
argument is a boolean. If TRUE
,
Zend_Loader::loadFile()
uses the PHP function
include_once()
for loading the file, otherwise the PHP function
include()
is used.
The static method Zend_Loader::loadClass($class, $dirs)
loads a PHP file and then checks for the existance of the class.
Voorbeeld 17.2. Example of loadClass() method
<?php Zend_Loader::loadClass('Container_Tree', array( '/home/production/mylib', '/home/production/myapp' ) ); ?>
The string specifying the class is converted to a relative path by substituting directory separates for underscores, and appending '.php'. In the example above, 'Container_Tree' becomes 'Container/Tree.php'.
If $dirs
is a string or an array,
Zend_Loader::loadClass()
searches the directories in
the order supplied. The first matching file is loaded. If the file
does not exist in the specified $dirs
, then the
include_path for the PHP environment is searched.
If the file is not found or the class does not exist after the load,
Zend_Loader::loadClass()
throws a Zend_Exception.
Zend_Loader::loadFile()
is used for loading, so the
class name may only contain alphanumeric characters and the hyphen
('-'), underscore ('_'), and period ('.').
The static method Zend_Loader::isReadable($pathname)
returns TRUE
if a file at the specified pathname exists
and is readable, FALSE otherwise.
Voorbeeld 17.3. Example of isReadable() method
<?php if (Zend_Loader::isReadable($filename)) { // do something with $filename } ?>
The $filename
argument specifies the filename to
check. This may contain path information.
This method is a wrapper for the PHP function
is_readable()
.
The PHP function does not search the include_path
,
while Zend_Loader::isReadable()
does.
The Zend_Loader class contains a method you can register with the
PHP SPL autoloader. Zend_Loader::autoload()
is the
callback method. As a convenience, Zend_Loader provides the
registerAutoload()
function register its
autoload()
method. If the spl_autoload
extension is not present in your PHP environment, then
registerAutoload()
method throws a Zend_Exception.
Voorbeeld 17.4. Example of registering the autoloader callback method
<?php Zend_Loader::registerAutoload(); ?>
After registering the Zend Framework autoload callback, you can
reference classes from the Zend Framework without having to load
them explicitly. The autoload()
method uses
Zend_Loader::loadClass()
automatically when you
reference a class.
If you have extended the Zend_Loader class, you can give an
optional argument to registerAutoload()
, to specify
the class from which to register an autoload()
method.