hio Andreas,
$config = new Config;
class Request {
var $used_language;
var $scriptname;
function Request() {
$lang = implode("|", $config->lang)
preg_match("/^/((".$lang.")/)?(.*)$/",$_GET["url"],$url_match);
$this->used_language = $url_match[2];
$this->scriptname = $url_match[3];
}
}Innerhalb der Klasse "Request" stzeht in $config->lang "NULL". Muß ich mir jetzt für jede Variable/Eigenschaft die ich extren(in einer anderen Klasse) verwenden will eine extra Methode schreiben?
Nein, $config ist in dem aktuellen Scope (also innerhalb deiner Instanz) einfach nicht bekannt. Du hast diese auf dem globalen Scope definiert und kannst über den darauf zugreifen. also
$lang = implode("|", $GLOBALS["config"]->lang) oder über global $config in den Scope "importieren"
Vom Gefühl her, hätte ich das etwas anders gelöst, wobei ich ehrlich nicht sagen kann ob das dann auch besser ist. Ich hätte aus Request heraus eine Instanz von config erzeugt. Ich denke liegt daran, das ich ungerne mit "globalen" arbeite. Oder ein anderer Vorschlag wäre,
du könntest auch die Klasse config auch umschreiben
class Config {
var $lang = array();
function Config() {
$this->lang[] = "de";
$this->lang[] = "en";
return $this->lang;
}
}
So liefert der Constructor das Array lang zurück, beim Instanzieren stört das nicht weiter, d.h. er liefert die Instanz (oder genauer die Referenz auf eine Kopie der Instanz) wobei du nun auch die Funktion Config ohne Instanz aufrufen kannst und dabei das Array lang bekommst. Also,
function Request() {
$lang = implode("|", config::config();)
preg_match("/^/((".$lang.")/)?(.*)$/",$_GET["url"],$url_match);
$this->used_language = $url_match[2];
$this->scriptname = $url_match[3];
}
aber wie gesagt, muss nicht besser sein, wollte nur eine andere Idee reinbringen. Bin nicht ganz wach, also sry wegen evtl. "Sprachungenauheiten" ;)
gl & hf
Thorsten