Hi,
Tuesday, March 4, 2003, 8:53:25 PM, you wrote:
CB> Mh...i need this for a class loader.
CB> Could you post your class loader? (i do not want to invent the wheel again)
CB> Thanks!
This works for me to load modules in a base class so adapt it as you
need.
<?
class loaderClass {
var $class_dir;
var $classes;
function loaderClass($class_dir=''){
//you will need to repace $_SERVER['PHPINCDIR'] with your default inc
dir as this is not a normal
// $_SERVER variable :)
$class_dir = (empty($class_dir))? $_SERVER['PHPINCDIR'] :$class_dir;
$class_dir .= (substr($class_dir,-1) == '/')? '':'/'; // need an
ending slash
$this->class_dir = $class_dir;
}
// This searches the class_dir set in constructor then
//php.ini path for the class to load
//All my classess are .inc
function setPath($class){
$r = false;
//first check with this path
$file = $this->class_dir.$class.'.inc';
if(!file_exists($file)){
$paths = split(':',ini_get('include_path'));
$found = false;
while(!$found && list($key,$val) = each($paths)){
$sep = (PHP_OS == 'Windows')? '\\':'/';
$file = $val.$sep.$class.'.inc';
if($found = file_exists($file)){
$r = $file;
}
}
}else{
$r = $file;
}
return $r;
}
//$name is used to id the loaded class
function &load($class,$name){
$r = False;
if(isset($this->classes[$name])){
$r =& $this->classes[$name];
}else{
if($file = $this->setPath($class)){
$vars = '$this->classes[$name] =& new '.$class.'(';
$num_args = func_num_args();
if($num_args > 2) {
$arg_list = func_get_args();
for ($i = 2; $i < $num_args; $i++) {
$vars .= ($i > 2)? ',':'';
$vars .= (is_string($arg_list[$i]))?
"'".$arg_list[$i]."'" : $arg_list[$i];
}
}
$vars .= ');';
include_once($file);
eval($vars);
$r =& $this->classes[$name];
}
}
return $r;
}
function &isLoaded($name) {
$r = False;
if(isset($this->classes[$name])){
$r =& $this->classes[$name];
}
return $r;
}
}
//usage for class foo2 called foo2Class in foo2Class.inc
include('loaderClass.inc');
class foo {
var $loader;
var $foo2;
function foo(){
this->loader =& new loaderClass('path_to_modules');
}
function load($var1,$var2,$var3){
$this->foo2 =&
$this->loader->load('foo2Class','foo2',$var1,$var2,$var3)
}
}
$f = new foo();
$f->load('Hello',2,3)
--
regards,
Tom
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php