Calling functions across an array of objects
Calling functions across an array of objects
am 28.08.2006 22:37:45 von pugorg
Hi,
ich habe ein ARRAY of classes, bei dem von einer Klasse aus Funktionen
einer anderen Klasse aufgerufen werden soll. Beispiel:
class ID {
function getID() {
...
}
}
class Name {
function getName() {
[gesucht: Syntax um Funktion ID->getID() aufrufen]
}
}
class Record {
var $fields;
function Record() {
$this->fields[] = new ID;
$this->fields[] = new Name;
}
}
Wie kann ich bei obigem Beispiel von Funktion getName in Klasse Name aus
die Funktion getID in Klasse ID aufrufen? Es bringt mir leider nichts,
die Funktion von Klasse Record aus aufzurufen, von wo aus es kein
Problem wäre.
Grüße
Silvério
Funktionsaufruf zwischen Klassen im array, war: Calling functionsacross an array of objects
am 28.08.2006 22:58:33 von pugorg
Silvério wrote:
> Hi,
>
> ich habe ein ARRAY of classes, bei dem von einer Klasse aus Funktionen
> einer anderen Klasse aufgerufen werden soll. Beispiel:
>
> class ID {
> function getID() {
> ...
> }
> }
>
> class Name {
> function getName() {
> [gesucht: Syntax um Funktion ID->getID() aufrufen]
> }
> }
>
> class Record {
> var $fields;
>
> function Record() {
> $this->fields[] = new ID;
> $this->fields[] = new Name;
> }
> }
>
> Wie kann ich bei obigem Beispiel von Funktion getName in Klasse Name aus
> die Funktion getID in Klasse ID aufrufen? Es bringt mir leider nichts,
> die Funktion von Klasse Record aus aufzurufen, von wo aus es kein
> Problem wäre.
>
> Grüße
> Silvério
Sorry, der Titel ist aus Versehen englisch geblieben (von einem anderen
englischsprachigen Posting).
Silvério
Re: Calling functions across an array of objects
am 28.08.2006 23:13:21 von Frank Schenk
Silvério schrieb:
> Wie kann ich bei obigem Beispiel von Funktion getName in Klasse Name aus
> die Funktion getID in Klasse ID aufrufen? Es bringt mir leider nichts,
> die Funktion von Klasse Record aus aufzurufen, von wo aus es kein
> Problem wäre.
- du gibst der Funktion das entsprechende Objekt mit
- du vererbst der Klasse die andere Klasse (extends)
- du nutzt den Scope Resolution Operator (
http://www.php.net/manual/en/language.oop5.paamayim-nekudota yim.php )
Suchs dir aus.
gruß, Frank
Re: Calling functions across an array of objects
am 28.08.2006 23:41:07 von Niels Braczek
Silv=E9rio schrieb:
> ich habe ein ARRAY of classes, bei dem von einer Klasse aus Funktionen =
> einer anderen Klasse aufgerufen werden soll. Beispiel:
>=20
> class ID {
> function getID() {
> ...
> }
> }
>=20
> class Name {
> function getName() {
> [gesucht: Syntax um Funktion ID->getID() aufrufen]
> }
> }
>=20
> class Record {
> var $fields;
>=20
> function Record() {
> $this->fields[] =3D new ID;
> $this->fields[] =3D new Name;
> }
> }
>=20
> Wie kann ich bei obigem Beispiel von Funktion getName in Klasse Name au=
s=20
> die Funktion getID in Klasse ID aufrufen? Es bringt mir leider nichts, =
> die Funktion von Klasse Record aus aufzurufen, von wo aus es kein=20
> Problem wäre.
Wenn 'Name' 'ID' kennen muss, ist dein Klassenkonzept kaputt. 'Name' hat
von 'Record' alles zu bekommen, was es wissen muss. Es geht 'Name' -- so
wie du das hier skizziert hast -- nichts an, ob 'ID' überhaupt
existiert, geschweige denn, direkt etwas von 'ID' zu wollen.
MfG
Niels
--=20
| http://www.kolleg.de =B7 Das Portal der Kollegs in Deutschland |
| http://www.bsds.de =B7 BSDS Braczek Software- und DatenSysteme |
| Webdesign =B7 Webhosting =B7 e-Commerce =B7 Joomla! Content Management =
|
------------------------------------------------------------ ------
Re: Calling functions across an array of objects
am 28.08.2006 23:49:54 von Frank Schenk
Niels Braczek schrieb:
> Wenn 'Name' 'ID' kennen muss, ist dein Klassenkonzept kaputt. 'Name' hat
> von 'Record' alles zu bekommen, was es wissen muss. Es geht 'Name' -- so
> wie du das hier skizziert hast -- nichts an, ob 'ID' überhaupt
> existiert, geschweige denn, direkt etwas von 'ID' zu wollen.
Ok, das isn Punkt, da hast du vermutlich recht. ;)
gruß, Frank
Re: Calling functions across an array of objects
am 28.08.2006 23:57:26 von pugorg
Hallo Frank,
siehe unten.
Frank Schenk wrote:
> Silvério schrieb:
>
>> Wie kann ich bei obigem Beispiel von Funktion getName in Klasse Name
>> aus die Funktion getID in Klasse ID aufrufen? Es bringt mir leider
>> nichts, die Funktion von Klasse Record aus aufzurufen, von wo aus es
>> kein Problem wäre.
>
> - du gibst der Funktion das entsprechende Objekt mit
Bei mehreren Objekten wird das nich handhabbar.
> - du vererbst der Klasse die andere Klasse (extends)
Die sind nicht von einander anhängig, sondern sogar von einer anderen
(aus vereinfachungsgründen weggelassen)
> - du nutzt den Scope Resolution Operator (
> http://www.php.net/manual/en/language.oop5.paamayim-nekudota yim.php )
Damit erreiche ich leider nicht die Instanz, in die ich die Daten (eine
Klassenvariable) eingegeben habe.
>
> Suchs dir aus.
>
>
> gruß, Frank
Danke und Gruß
Silvério
Re: Calling functions across an array of objects
am 29.08.2006 00:08:45 von pugorg
Niels Braczek wrote:
> Silvério schrieb:
>
>> ich habe ein ARRAY of classes, bei dem von einer Klasse aus Funktionen
>> einer anderen Klasse aufgerufen werden soll. Beispiel:
>>
>> class ID {
>> function getID() {
>> ...
>> }
>> }
>>
>> class Name {
>> function getName() {
>> [gesucht: Syntax um Funktion ID->getID() aufrufen]
>> }
>> }
>>
>> class Record {
>> var $fields;
>>
>> function Record() {
>> $this->fields[] = new ID;
>> $this->fields[] = new Name;
>> }
>> }
>>
>> Wie kann ich bei obigem Beispiel von Funktion getName in Klasse Name aus
>> die Funktion getID in Klasse ID aufrufen? Es bringt mir leider nichts,
>> die Funktion von Klasse Record aus aufzurufen, von wo aus es kein
>> Problem wäre.
>
> Wenn 'Name' 'ID' kennen muss, ist dein Klassenkonzept kaputt. 'Name' hat
> von 'Record' alles zu bekommen, was es wissen muss. Es geht 'Name' -- so
> wie du das hier skizziert hast -- nichts an, ob 'ID' überhaupt
> existiert, geschweige denn, direkt etwas von 'ID' zu wollen.
Niels,
OK, dann frage ich anders:
Ich möchte die Felder eines Datensatzes als Klassen beschreiben, damit
ich den Feldern Eigenschaften und Funktionen geben kann. Wie kann ich
diese kapseln, so dass jedes Feld über sich selbst Bescheid weiss und
Informationen/Entscheidungen anderer Felder abfragen kann?
Dabei fülle ich die Daten aus der Klasse Record heraus in die Felder.
Die Felder sollen diese Daten verarbeiten und u.a. in Abhängigkeit von
Entscheidungen anderer Felder unterschiedlich ausgeben. Beispiel: wenn
keine ID angegeben wird, soll bei Name "n/v" ausgegeben werden.
Gruss
Silvério
Re: Calling functions across an array of objects
am 29.08.2006 01:06:29 von Niels Braczek
Silv=E9rio schrieb:
> OK, dann frage ich anders:
> Ich möchte die Felder eines Datensatzes als Klassen beschreiben, dami=
t=20
> ich den Feldern Eigenschaften und Funktionen geben kann. Wie kann ich=20
> diese kapseln, so dass jedes Feld über sich selbst Bescheid weiss und=
=20
> Informationen/Entscheidungen anderer Felder abfragen kann?
Das entscheidet 'Record', niemand sonst.
> Dabei fülle ich die Daten aus der Klasse Record heraus in die Felder.=
=20
> Die Felder sollen diese Daten verarbeiten und u.a. in Abhängigkeit vo=
n=20
> Entscheidungen anderer Felder unterschiedlich ausgeben. Beispiel: wenn =
> keine ID angegeben wird, soll bei Name "n/v" ausgegeben werden.
class Record
{
...
function getName()
{
if ( $this->ID->isEmpty() ) {
return 'n/v';
}
return $this->Name->getName();
}
...
}
MfG
Niels
--=20
| http://www.kolleg.de =B7 Das Portal der Kollegs in Deutschland |
| http://www.bsds.de =B7 BSDS Braczek Software- und DatenSysteme |
| Webdesign =B7 Webhosting =B7 e-Commerce =B7 Joomla! Content Management =
|
------------------------------------------------------------ ------
Re: Calling functions across an array of objects
am 31.08.2006 00:05:21 von pugorg
Niels Braczek schrieb:
> Silvério schrieb:
>
>> OK, dann frage ich anders:
>> Ich möchte die Felder eines Datensatzes als Klassen beschreiben, damit
>> ich den Feldern Eigenschaften und Funktionen geben kann. Wie kann ich
>> diese kapseln, so dass jedes Feld über sich selbst Bescheid weiss und
>> Informationen/Entscheidungen anderer Felder abfragen kann?
>
> Das entscheidet 'Record', niemand sonst.
>
> class Record
> {
> ...
> function getName()
> {
> if ( $this->ID->isEmpty() ) {
> return 'n/v';
> }
> return $this->Name->getName();
> }
> ...
> }
Hi,
danke. Da ich damit die Kapselung aufgeben müßte und die Funktionen, die
mit den Feldern zu tun haben, in die "übergeordnete" Klasse schreiben
müsste, werde ich diesen Ansatz wohl oder übel aufgeben. Schade.
Gruss
Silvério
Re: Calling functions across an array of objects
am 16.09.2006 13:26:16 von pugorg
Niels Braczek schrieb:
> Silvério schrieb:
>
>> ich habe ein ARRAY of classes, bei dem von einer Klasse aus Funktionen
>> einer anderen Klasse aufgerufen werden soll. Beispiel:
>>
>> class ID {
>> function getID() {
>> ...
>> }
>> }
>>
>> class Name {
>> function getName() {
>> [gesucht: Syntax um Funktion ID->getID() aufrufen]
>> }
>> }
>>
>> class Record {
>> var $fields;
>>
>> function Record() {
>> $this->fields[] = new ID;
>> $this->fields[] = new Name;
>> }
>> }
>>
>> Wie kann ich bei obigem Beispiel von Funktion getName in Klasse Name aus
>> die Funktion getID in Klasse ID aufrufen? Es bringt mir leider nichts,
>> die Funktion von Klasse Record aus aufzurufen, von wo aus es kein
>> Problem wäre.
>
> Wenn 'Name' 'ID' kennen muss, ist dein Klassenkonzept kaputt. 'Name' hat
> von 'Record' alles zu bekommen, was es wissen muss. Es geht 'Name' -- so
> wie du das hier skizziert hast -- nichts an, ob 'ID' überhaupt
> existiert, geschweige denn, direkt etwas von 'ID' zu wollen.
Niels, alle,
ich habe einen Tipp bekommen, mit dem ich evtl. das Problem lösen
könnte: eine Kommunikator-Funktion. Die soll in Record stehen und
Funktionen in den anderen Klassen, die im Array stehen, aufrufen. Die
Rückgabewerte werden stehen dann in der aufrufenden Klasse zur Verfügung.
Der Knackpunkt bei diesem Verfahren ist ob und mit welcher Syntax eine
Funktion aufruft, die in der Klasse steht, die ein Array enthält, in der
sich die Klasse mit der aufrufenden Funktion befindet. Geht so etwas?
Gruss
Silvério