PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Zugriff auf Klassenvariable von "außen"



Torsten.E
22-04-2004, 12:25
Ich will Variablen in einer "anderen" Klasse dynamisch
ändern, geht aber nicht, nur abfragen.

Die Funktion "doGetVar" kann ich entsprechend
aufrufen und das klappt auch, aber "doSetVar" geht
nicht.

Hat da einer eine Idee. (ausser Gaert ;-) )

Torsten.E


--schnipsel---

class adressen

var $Name;
var $Vorname;

function doInit() {

$Name = "WeisNicht";
$Vorname = "Ich";
}

function doGetVar($VarName) {

return $this->$VarName;
}


function doSetVar($VarName, $Value) {

$this->$VarName = $Value; // sollte eine Klassenvariable ändern
}
}

Gaert
22-04-2004, 13:36
Auch wenn ich nicht antworten soll - ich tu's trotzdem:

Hab das gerade mal getestet und für "gut" befunden...


<?php
class adressen
{

var $Name;
var $Vorname;

function adressen() {
//Konstruktor für PHP4
$this->__construct();
}

function __construct() {
//Konstruktor für PHP5
$this->Name = "WeisNicht";
$this->Vorname = "Ich";
}

function doGetVar($VarName) {
return $this->$VarName;
}


function doSetVar($VarName, $Value) {
$this->$VarName = $Value; // sollte eine Klassenvariable ändern
}
}

$a = new adressen();

echo $a->doGetVar("Name");
echo "<br/>";
$a->doSetVar("Name","Hans");
echo $a->doGetVar("Name");
echo "<br/>";
?>

Torsten.E
22-04-2004, 14:42
Danke Gaert, soweit hat es bei mir auch geklappt,

ich hatte die Anfrage nicht ganz richtig gestellt.
Ich habe das Skript mal ein bisschen erweitert und
jetzt geht`s nämlich imme.

Ähm, wie macht man hier am besten so Quellcodeschnippsel hier.




<?php

define ('_NAME', 0);
define ('_VORNAME', 1);

class adressen
{

var $Adresse;

function adressen() {
//Konstruktor für PHP4
$this->__construct();
}

function __construct() {
//Konstruktor für PHP5
$this->Adresse = array();
$this->Adresse[_NAME] = "WeisNicht";
$this->Adresse[_VORNAME] = "Ich";
}

function doGetVar($VarName) {
return $this->$VarName;
}

function doSetVar($VarName, $Value) {
$this->$VarName = $Value; // sollte eine Klassenvariable „ndern
}

function doShowVar() {
echo "<br>";
echo $this->Adresse[_NAME];
echo "<br>";
echo $this->Adresse[_VORNAME];
echo "<br>";
}
}


$a = new adressen();

echo $a->doGetVar("Adresse[_NAME]");
echo "<br/>";

$a->doSetVar("Adresse[_VORNAME]","Hans");
echo $a->doGetVar("Adresse[_VORNAME]");
echo "<br/>";
$a->doShowVar();
?>

Pingu
22-04-2004, 15:05
Hi,

das verstehe ich jetzt nicht, entweder Du möchtest über separate Variablen arbeiten, dann die Version von Gaert oder über ein array wie hier (aber nicht gemixt):


<?php

define (_NAME, 0);
define (_VORNAME, 1);

class adressen
{

var $Adresse;

function adressen() {
//Konstruktor für PHP4
$this->__construct();
}

function __construct() {
//Konstruktor für PHP5
$this->Adresse = array();
$this->Adresse[_NAME] = "WeisNicht";
$this->Adresse[_VORNAME] = "Ich";
}

function doGetVar($VarName) {
return $this->Adresse[$VarName];
}

function doSetVar($VarName, $Value) {
$this->Adresse[$VarName] = $Value; // sollte eine Klassenvariable „ndern
}

function doShowVar() {
echo "<br>";
echo $this->Adresse[_NAME];
echo "<br>";
echo $this->Adresse[_VORNAME];
echo "<br>";
}
}


$a = new adressen();

echo $a->doGetVar(_NAME);
echo "<br/>";

$a->doSetVar(_VORNAME,"Hans");
echo $a->doGetVar(_VORNAME);
echo "<br/>";
$a->doShowVar();
?>

Warum da andere nicht funktioniert? Du mixt jetzt noch defines, also Markos ein. Die Markonamen sind bei Dir Strings. Das ganze wird als Strings übergeben. Da verliehre ich ja schon den Überblick, was soll da erst der Compiler/Interpreter denken? ;)

Pingu

Torsten.E
22-04-2004, 15:10
Ich dachte halt, dass es so klappen könnten.

Jetzt gibt es in einer Klasse halt "normale" Variable und
Arrays und damit kann ich nicht die gleiche Funktion "SetVar" und
"GetVar" benutzen, zum setzen und Abfragen der Werte sondern
muß mir halt 2 unterschiedliche Funktionen bauen, was aber
auch nicht schlimm ist.

Torsten.E