3Dnavigator
Erfahrenes Mitglied
Hallo zusammen
Ich komme hier irgendwie nicht weiter. Ich habe eine Autoload-Funktion, welche mir Klassen-Dateien laden soll, falls noch nicht geschehen:
Die Konstanten, welche die unterschiedlichen Verzeichnisse enthalten sind korrekt.
Nun funktioniert so weit auch. Nun habe ich eine Methode geschrieben, welche eine neue Instanz einer Klasse generieren und allfällige Argumente mitgeben soll:
Das funktioniert so weit eigentlich auch.
Doch in dem folgenden Code, wird auf der zweiten Zeile der Methode initExtension() versucht eine Instanz der Klasse 'ar_login' zu erstellen.
Dabei tritt folgender Fehler auf: Fatal error: Class 'ar_login' not found in /Users/username/Sites/applicationname/ar/class/arHelper.php(18) : eval()'d code on line 1
Und dies, ohne überhaupt die Autoloader-Funktion ausgeführt zu haben!
Was ist da falsch? Ich stehe da total auf dem Schlauch...
Vielen Dank schon im Voraus für jede Hilfe!
Grüsse,
3Dnavigator
Ich komme hier irgendwie nicht weiter. Ich habe eine Autoload-Funktion, welche mir Klassen-Dateien laden soll, falls noch nicht geschehen:
PHP:
function __autoload($className){
$arrDirectories = array(
PATH_APP_CLASS,
PATH_APP_CONTR,
PATH_APP_MODEL,
PATH_AR_CLASS,
PATH_AR_CONTR,
PATH_AR_FUNCT,
PATH_AR_MODEL
);
foreach($arrDirectories as $directory){
if(file_exists($directory.'/'.$className.'.php')){
require($directory.'/'.$className.'.php');
break;
}
}
}
Die Konstanten, welche die unterschiedlichen Verzeichnisse enthalten sind korrekt.
Nun funktioniert so weit auch. Nun habe ich eine Methode geschrieben, welche eine neue Instanz einer Klasse generieren und allfällige Argumente mitgeben soll:
PHP:
class arHelper {
static public function newInstance(){
$className = func_get_arg(0);
$numArgs = func_num_args();
if($numArgs > 1){
$arrArgs = func_get_args();
$argList = '';
foreach($arrArgs as $key => $arg){
if($key > 0){
$argList .= '$arrArgs['.$key.'],';
}
}
$argList = substr($argList, 0, -1);
}
if(isset($argList)){
$res = eval("return new $className($argList);");
} else{
return new $className;
}
}
}
Das funktioniert so weit eigentlich auch.
Doch in dem folgenden Code, wird auf der zweiten Zeile der Methode initExtension() versucht eine Instanz der Klasse 'ar_login' zu erstellen.
Dabei tritt folgender Fehler auf: Fatal error: Class 'ar_login' not found in /Users/username/Sites/applicationname/ar/class/arHelper.php(18) : eval()'d code on line 1
Und dies, ohne überhaupt die Autoloader-Funktion ausgeführt zu haben!
PHP:
<?php
class arBase {
protected $output = 'html';
protected $arrCss = array();
protected $arrJs = array();
function __construct(){
$GLOBALS['DB'] = arHelper::newInstance('arDatabase', DB_HOST, DB_USER, DB_PASS, DB_DBASE, DB_PORT);
}
public function createOutput(){
if(APP_LOGIN_NECESSARY && !isset($_SESSION['userId'])){
$currentExt = 'ar';
$currentCtr = 'login';
$currentAct = 'index';
}
$this->tmpl = arHelper::newInstance('arTemplate');
$this->tmpl->setOutput($this->getOutput());
$this->tmpl->assign(array(
'appAuthor' => APP_AUTHOR,
'appTitle' => APP_NAME,
'appCharset' => APP_CHARSET,
'appDescription' => APP_DESCRIPTION,
'appKeywords' => APP_KEYWORDS
));
$this->tmpl->addJsArr($this->getJsArr());
$this->tmpl->assign('content', $this->initExtension($currentExt, $currentCtr, $currentAct));
return $this->tmpl->create(PATH_TEMPLATE_MAIN);
}
protected function getJsArr(){
return $this->arrJs;
}
public function getOutput(){
return $this->output;
}
protected function initExtension($ext, $ctr, $act){
$extensionName = $ext.'_'.$ctr;
$extension = arHelper::newInstance($extensionName, $ext, $ctr, $act);
// return $extension->$act();
}
}
?>
Was ist da falsch? Ich stehe da total auf dem Schlauch...
Vielen Dank schon im Voraus für jede Hilfe!
Grüsse,
3Dnavigator