Zur Navigation

Variablen innerhalb einer PHP-Klasse

1 AndiN

Hallo Jörg,
ich habe eine PHP-Klasse in welcher Monatsnamen drinstehen. Nun möchte ich - abhängig von $_SERVER['SCRIPT_NAME'] - dort verschiedene Sprachen reinladen. Prinzipiell könnte ich es wie folgt machen (Funktion auf den wesentlichen Teil gekürzt):

if(strstr($_SERVER['SCRIPT_NAME'],"admin"))
{
	final class DateTimeUtil
	{
		const MAX_MONTH_DAY_NUM = 31;
		private static $monthNames = array('Gennaio','Febbraio','Marzo','Aprile','Maggio','Giugno','Luglio','Agosto','Settembre','Ottobre','Novembre','Dicembre');
		private static $monthShortcutNames = array('Jan','Feb','Mrz','Apr','Mai','Jun','Jul','Aug','Sep','Okt','Nov','Dez');
		private static $weekdayShortcutNames = array('do', 'lu', 'ma', 'me', 'gi', 've', 'sa');
		private function __construct() { }
		(...)
	}
}
else
{
	final class DateTimeUtil
	{
		const MAX_MONTH_DAY_NUM = 31;
		private static $monthNames = array('Januar','Februar','März','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember');
		private static $monthShortcutNames = array('Jan','Feb','Mrz','Apr','Mai','Jun','Jul','Aug','Sep','Okt','Nov','Dez');
		private static $weekdayShortcutNames = array('So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa');
		private function __construct() { }
		(...)
	}
}

Viel lieber wäre es mir natürlich wenn ich die Funktion nicht kopieren müsste, sondern das in der Richtung realisieren könnte was allerdings nicht so geht da ich vermutlich die Variablen in der Class in irgend eienr Form definieren muss nehme ich an:

if(strstr($_SERVER['SCRIPT_NAME'],"admin"))
{
	$monate = ....;
	$monatekurz = ....;
	$monatekurzklein = ....;
}
else
{
	$monate = ...;
	$monatekurz = ...;
	$monatekurzklein = ...;
}

final class DateTimeUtil
{
	const MAX_MONTH_DAY_NUM = 31;
	private static $monthNames = array($monate);
	private static $monthShortcutNames = array($monatekurz);
	private static $weekdayShortcutNames = array($monatekurzklein);
	private function __construct() { }
	(...)
}

Ich finde zwar viele Tutorials im Netz, aber irgendwie klappt es einfach nicht.

Ein zweites Problem ist, dass beim Weiterblättern der Monate per AJAX offenbar die $_SERVER['SCRIPT_NAME'] ignoriert wird und die Monatsnamen immer auf Deutsch angezeigt werden. D.h. er tut so als wäre diese Variable nicht vorhanden, leer oder mit einem anderen Wert belegt was ja nicht sein kann da ich den Script-Pfad ja nicht ändere.

21.09.2012 10:56 | geändert: 21.09.2012 11:03

2 Jörg Kruse

Ich würde ein multidimensionales Array anlegen:

private static $monthNames = array(
'it' => array('Gennaio','Febbraio','Marzo','Aprile','Maggio','Giugno','Luglio','Agosto','Settembre','Ottobre','Novembre','Dicembre'),
'de' => array('Januar','Februar','März','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember')
);

Dann kannst du je nach Kontext mit $monthNames['it'] oder $monthNames['de'] operieren.

Die Sprache könntest du über den Konstruktor übergeben
private function __construct($lang)
{  /* ... */ }

if (strstr($_SERVER['SCRIPT_NAME'], "admin")) {
    $foo_admin = new DateTimeUtil('it');
} else {
    $foo = new DateTimeUtil('de');
}

Ansonsten ließe sich eine Klasse auch mit extends erweitern:

http://php.net/manual/de/keyword.extends.php

Ein zweites Problem ist, dass beim Weiterblättern der Monate per AJAX offenbar die $_SERVER['SCRIPT_NAME'] ignoriert wird

Das Ajax-Script hat einen eigenen SCRIPT_NAME. Du könntest diesen aber als Parameter an der Ajax-URL übergeben

21.09.2012 12:01

Beitrag schreiben (als Gast)

Die Antwort wird nach der Überprüfung durch einen Moderator freigeschaltet.





[BBCode-Hilfe]