Readonly-Property auf private-Variable einer statischen Klasse

Thomas D

Erfahrenes Mitglied
Hallo!

Ich arbeite mich gerade in PHP5 ein und würde gerne auf eine Variable einer statischen Klasse nur lesenden Zugriff erlauben.

Code:
class Konstanten
{
	private static $HOST = "localhost";

	public function __get ($varName)
	{
		echo "GET";
		return $varName;
	}
}

Wenn ich nun

Code:
echo Konstanten::$HOST;

aufrufe, bekomme ich den folgenden Fehler (und keine Ausgabe von "GET"):

Fatal error: Cannot access private property Konstanten::$HOST

Wie muss ich vorgehen, dass ich auf eine Variable einer statischen Klasse nur readonly-Zugriff erlaube?
 
wie wärs den mit
PHP:
Konstanten::$HOST
Du willst ja auch eine Konstante abfragen mit Konstanten::HOST
HOST ist aber eine private static....
 
wie wärs den mit
PHP:
Konstanten::$HOST
Du willst ja auch eine Konstante abfragen mit Konstanten::HOST
HOST ist aber eine private static....

Das habe ich ja schon in mein Ausgangsposting geschrieben. Ich möchte mithilfe von __get() ein ReadOnly-Property erzeugen (s. C#). Dies funktioniert auch wunderbar, außer bei meinen statischen Variablen. Deswegen wollte ich fragen, wie ich dies für statische Variablen hinkriege ...
 
Hi, die __get() Funktion von PHP funktioniert (noch) nicht für statische Zugriffe. Soweit ich weiss, ist für kommende PHP Versionen geplant, dies nachzurüsten, aber bislang gibt es keine Möglichkeit, die __get() Methode statisch zu benutzen. (Das gilt ebenso für alle anderen "magischen Methoden", wie z.B. __set() und __call())

Eine mögliche Lösung wäre es, die Klasse als Singleton zu implementieren, dann wären keine statischen Zugriffe nötig, und du könntest tatsächlich mit der __get() Funktion arbeiten.
 
Hi, die __get() Funktion von PHP funktioniert (noch) nicht für statische Zugriffe. Soweit ich weiss, ist für kommende PHP Versionen geplant, dies nachzurüsten, aber bislang gibt es keine Möglichkeit, die __get() Methode statisch zu benutzen. (Das gilt ebenso für alle anderen "magischen Methoden", wie z.B. __set() und __call())

Danke für den Hinweis ;-)!

Ich hab' das ganze jetzt wie folgt gelöst:

Code:
class Konstanten
{
	private static $constArr = array (
		"DEVELOPING" => true,
		"HOST"=> "localhost");

	public function get ($varName)
	{
		return self::$constArr[$varName];
	}
}

Code:
echo Konstanten::get ("HOST");
 
Zurück