PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PHP5: read-only Klassenelemente


Marscel
2005-11-30, 18:41:18
Heute sah ich mal eine Vertiefung in PHP5 notwendig und hab gleich ne Frage, die mir durch den Kopf geht.

Ich hab nen Dutzend private Variablen in einer Klasse und keinen Bock für jede einzelene eine Lesemethode zu schreiben, sondern eine, mit der man auf alle zugreifen kann. Wichtig ist mir, dass das ausserhalb der Klassenmethoden read-only bleibt.

class class1
{
...
}

class class2
{
private $class1var;

public function __construct()
{
print "class2-object!";

$this->class1var = new class1;
}

public function class2_get_private_var($var)
{
return $this->$var;
}
}

$obj = new class2;
print $obj->class2_get_private_var("class1var")->get_something();

Ich finde das mit dem String nach einem Element zu suchen, irgendwie für PHP typisch dumm. Da muss es doch was Anderes geben, oder?

The_Invisible
2005-11-30, 19:13:30
mach doch ein Array in dem alle Variablen sozusagen enthalten sind, bzw, ich sehe da irgendwie kein richtiges problem

mfg

Marscel
2005-11-30, 19:29:36
mach doch ein Array in dem alle Variablen sozusagen enthalten sind, bzw, ich sehe da irgendwie kein richtiges problem

Ein Problem ist es ja auch nicht,die Methode funktioniert, nur finde ich es, wie gesagt, ein wenig eigenartig, dem Code durch einen String zu sagen, welche Variable ich gerne hätte.

MadMan2k
2005-11-30, 19:36:22
wenn du über die methode eh an jede variable rankommst, wieso deklariest du sie nicht gleich als public?

Marscel
2005-11-30, 19:45:05
wenn du über die methode eh an jede variable rankommst, wieso deklariest du sie nicht gleich als public?

Ich möchte ja versuchen, sie nur lesen zu können über die Zugriffsmethode, sie soll aber nicht extern veränderbar sein können, sonst mach ich $obj->class1var = 1234; und der Kram ist hin.

The_Invisible
2005-11-30, 21:10:50
Ein Problem ist es ja auch nicht,die Methode funktioniert, nur finde ich es, wie gesagt, ein wenig eigenartig, dem Code durch einen String zu sagen, welche Variable ich gerne hätte.

wie willst du es den sonst haben wenn die vars nicht public sein dürfen und nur read-only? finde deinen ansatz ja garkeine schlechte idee

mfg

Marscel
2005-11-30, 22:13:33
Ich dachte, es gäbe vielleicht eine Möglichkeit, z.B. $this->class1var als Parameter übergeben zu können und dadurch, dass die Variablenbezeichnung durch die Klassenmethode flutscht, die Variable lesbar wird.

Praktisch: Du bekommst den Variablenbezeichnung, und gibts mit diese mit dem Wert zurück, wobei $this nicht vernachlässigt werden soll.

Nur glaube ich so langsam, dass das nicht möglich ist bzw. dass man das nicht großartig anders lösen kann, als ich das hab.