var_dump() für statische Klasse?

var_dump() für statische Klasse?

am 07.11.2006 20:55:51 von akorthaus

Hallo!

Hat jemand ne Idee, wie man sowas wie var_dump() etc. auf eine statische =

Klasse anwenden kann?

Grüße
Andreas

Re: var_dump() für statische Klasse?

am 07.11.2006 23:30:59 von Niels Braczek

Andreas Korthaus schrieb:

> Hat jemand ne Idee, wie man sowas wie var_dump() etc. auf eine statisch=
e=20
> Klasse anwenden kann?

Gegenfrage: Um *was* zu erfahren?

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: var_dump() für statische Klasse?

am 08.11.2006 00:07:57 von akorthaus

Hallo!

Niels Braczek schrieb:
>> Hat jemand ne Idee, wie man sowas wie var_dump() etc. auf eine statisc=
he=20
>> Klasse anwenden kann?
>=20
> Gegenfrage: Um *was* zu erfahren?

Den aktuellen Wert aller privaten und öffentlichen Klassenvariablen.

Beispiel:

class User {
private static $name;
public static function load($user) {
self::$user =3D $user;
}
}

User::load('Niels');
var_dump(?);


Viele Grüße
Andreas

Re: var_dump() für statische Klasse?

am 08.11.2006 00:12:28 von Rudi Menter

Am Wed, 08 Nov 2006 00:07:57 +0100 schrieb Andreas Korthaus:

> Hallo!
>
> Niels Braczek schrieb:
>>> Hat jemand ne Idee, wie man sowas wie var_dump() etc. auf eine statische
>>> Klasse anwenden kann?
>>
>> Gegenfrage: Um *was* zu erfahren?
>
> Den aktuellen Wert aller privaten und öffentlichen Klassenvariablen.
>
> Beispiel:
>
> class User {
> private static $name;
> public static function load($user) {
> self::$user = $user;
> }
> }
>
> User::load('Niels');
> var_dump(?);


Oder meinst du self::$name = $user; ?

fG
--

Re: var_dump() für statische Klasse?

am 08.11.2006 00:43:09 von Niels Braczek

Andreas Korthaus schrieb:
> Niels Braczek schrieb:

>>> Hat jemand ne Idee, wie man sowas wie var_dump() etc. auf eine statis=
che=20
>>> Klasse anwenden kann?
>>=20
>> Gegenfrage: Um *was* zu erfahren?
>=20
> Den aktuellen Wert aller privaten und öffentlichen Klassenvariablen.

Der steht im Sourcecode.

> Beispiel:
>=20
> class User {
> private static $name;
> public static function load($user) {
> self::$user =3D $user;
> }
> }
>=20
> User::load('Niels');
> var_dump(?);

Das halte ich für einen Designfehler, da du Variablen verwendest, was s=
o
nicht zum Konzept 'statische Klasse' passt (suchst du vielleicht ein
Singleton?). Dass du $this-> durch self:: ersetzt, ändert daran IMHO
nicht wirklich etwas.

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: var_dump() für statische Klasse?

am 08.11.2006 00:59:40 von akorthaus

Rudi Menter schrieb:

>> self::$user = $user;
> Oder meinst du self::$name = $user; ?

ja ;-)

Re: var_dump() für statische Klasse?

am 08.11.2006 01:16:50 von akorthaus

Hallo!

Niels Braczek schrieb:

>>> Gegenfrage: Um *was* zu erfahren?
>> Den aktuellen Wert aller privaten und öffentlichen Klassenvariablen.=

>=20
> Der steht im Sourcecode.

Wenn Du so argumentierst braucht man überhaupt kein var_dump(). $name=20
kann ja z.B. auch aus der Datenbank kommen, dann steht es nicht mehr im=20
Quellcode.

> Das halte ich für einen Designfehler, da du Variablen verwendest, was=
so
> nicht zum Konzept 'statische Klasse' passt (suchst du vielleicht ein
> Singleton?). Dass du $this-> durch self:: ersetzt, ändert daran IMHO
> nicht wirklich etwas.

Aber wozu gibt es dann "static" für Eigenschaften?

Was ist an einem Singleton besser als an einer statischen Klasse? Gut,=20
man kann es als Parameter mitgeben, aber weil ich
a) sowas wie Datenbank-Objekt, Template-Objekt oder User-Objekt nicht=20
überall als Parameter mitgeben will, und
b) diese nur eine Instanz haben
verwende ich hier statische Klassen oder Singletons.


Viele Grüße
Andreas

Re: var_dump() für statische Klasse?

am 08.11.2006 01:33:36 von Rudi Menter

Andreas Korthaus schrieb:
> Niels Braczek schrieb:

>>>> Gegenfrage: Um *was* zu erfahren?
>>> Den aktuellen Wert aller privaten und öffentlichen Klassenvariablen.
>>
>> Der steht im Sourcecode.
>
> Wenn Du so argumentierst braucht man überhaupt kein var_dump(). $name
> kann ja z.B. auch aus der Datenbank kommen, dann steht es nicht mehr im
> Quellcode.
>
>> Das halte ich für einen Designfehler, da du Variablen verwendest, was so
>> nicht zum Konzept 'statische Klasse' passt (suchst du vielleicht ein
>> Singleton?). Dass du $this-> durch self:: ersetzt, ändert daran IMHO
>> nicht wirklich etwas.
>
> Aber wozu gibt es dann "static" für Eigenschaften?
>
> Was ist an einem Singleton besser als an einer statischen Klasse? Gut,
> man kann es als Parameter mitgeben, aber weil ich
> a) sowas wie Datenbank-Objekt, Template-Objekt oder User-Objekt nicht
> überall als Parameter mitgeben will, und
> b) diese nur eine Instanz haben
> verwende ich hier statische Klassen oder Singletons.


Du hast recht, das sind sicherlich praktische Dinge, gehen
täte alles. Aber:

wenn du eine Sprache oder Grundbibliothek einrichtest, dann
wirst du im Falle von Objektorientiertheit sicherlich von einer
Basisobjektklasse ausgehen, und deine Debug-Funktionalität
entsprechend auf(!) dieser Basisklasse implementieren, so wie
alles Leben auf dem einen genetischen Code beruht, Ausnahmen
mag es geben, aber die sind selten...

Also: statische Klassen erben das da einfach nicht per se, dazu
das extra zu implementieren wäre viel Extra-Aufwand nötig, der
dazu noch kontraproduktiv wäre, bei Singletons "wäre" alles ok.


fG
--

Re: var_dump() für statische Klasse?

am 08.11.2006 05:27:57 von Niels Braczek

Andreas Korthaus schrieb:
> Niels Braczek schrieb:
>=20
>>>> Gegenfrage: Um *was* zu erfahren?
>>> Den aktuellen Wert aller privaten und öffentlichen Klassenvariablen=

>>=20
>> Der steht im Sourcecode.
>=20
> Wenn Du so argumentierst braucht man überhaupt kein var_dump(). $name=
=20
> kann ja z.B. auch aus der Datenbank kommen, dann steht es nicht mehr im=
=20
> Quellcode.

Das ist nicht richtig. Bei *Objekten* habe ich durchaus Daten, die ich
nicht unbedingt im Quellcode finde. Bei statischen Klassen hingegen
steht alles im Quellcode. Sonst sind sie ja nicht statisch. Eine
statische Klasse hat keine Klassen-Variablen.

>> Das halte ich für einen Designfehler, da du Variablen verwendest, wa=
s so
>> nicht zum Konzept 'statische Klasse' passt (suchst du vielleicht ein
>> Singleton?). Dass du $this-> durch self:: ersetzt, ändert daran IMHO=

>> nicht wirklich etwas.
>=20
> Aber wozu gibt es dann "static" für Eigenschaften?

Innerhalb von Funktionen/Methoden erlaubt static das 'Überleben' der
Werte über die Lebensdauer der Funktion hinaus. Was static bei
Klassen-Eigenschaften soll, ist mir allerdings auch schleierhaft.

> Was ist an einem Singleton besser als an einer statischen Klasse?

Ein Singleton kann variable Werte verwalten, eine statische Klasse nicht.=


> Gut,=20
> man kann es als Parameter mitgeben, aber weil ich
> a) sowas wie Datenbank-Objekt, Template-Objekt oder User-Objekt nicht=20
> überall als Parameter mitgeben will, und
> b) diese nur eine Instanz haben
> verwende ich hier statische Klassen oder Singletons.

Eben, Singleton und nicht statische Klasse. Ein Singleton braucht ja
nicht übergeben zu werden, man 'holt' es sich. Eine statische Klasse is=
t
letztlich nichts anderes als ein Namespace-Ersatz für Hilfsfunktionen.

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: var_dump() für statische Klasse?

am 08.11.2006 09:26:15 von Claus Reibenstein

Andreas Korthaus schrieb:

> Niels Braczek schrieb:
>
>>> Hat jemand ne Idee, wie man sowas wie var_dump() etc. auf eine statische
>>> Klasse anwenden kann?
>>
>> Gegenfrage: Um *was* zu erfahren?
>
> Den aktuellen Wert aller privaten und öffentlichen Klassenvariablen.

Mit meinen dürftigen OO-Kenntnissen (ich komme aus der C-Welt) würde ich
empfehlen, einfach der Klasse eine entsprechende statische Funktion
hinzuzufügen, die die gewünschten Daten ausgibt.

> Beispiel:
>
> class User {
> private static $name;
> public static function load($user) {
> self::$user = $user;
> }

public static function var_dump() {
echo ...;
}

> }
>
> User::load('Niels');
> var_dump(?);

User::var_dump();

Für die genaue Syntax übernehme ich keine Garantie :-)

Gruß. Claus

--
,~°O O
O ,´ / |/|\
/ |¯`. Das neue Hochzeits-Branchenbuch im Internet ,´ / | |\
/__| `~...............................................~´ /___|/ /

Re: var_dump() für statische Klasse?

am 08.11.2006 09:57:30 von Helmut Chang

Andreas Korthaus schrieb:

> Was ist an einem Singleton besser als an einer statischen Klasse?

Dass du eine Instanz hast. Du hast dann bspw. ein User-Objekt.

> Gut,
> man kann es als Parameter mitgeben, aber weil ich
> a) sowas wie Datenbank-Objekt, Template-Objekt oder User-Objekt nicht
> überall als Parameter mitgeben will, und
> b) diese nur eine Instanz haben
> verwende ich hier statische Klassen oder Singletons.

Eben nicht. Bei einer statischen Klasse hast du keine Instanz. Statische
Klassen haben IMHO nur dann (begrenzt) einen Sinn, wenn es darum geht,
Funktionen OO zusammenzufassen. Beispielsweise ein Math-Klasse, die
verschiedene arithmetische Methoden definiert. Dafür benötigt es keine
Instanz. Aber bereits ein Datenbank-Objekt ist eben ein *Objekt*.

gruss, heli

Re: var_dump() für statische Klasse?

am 08.11.2006 15:57:55 von akorthaus

Hallo!

Niels Braczek schrieb:
>> Wenn Du so argumentierst braucht man überhaupt kein var_dump(). $nam=
e=20
>> kann ja z.B. auch aus der Datenbank kommen, dann steht es nicht mehr i=
m=20
>> Quellcode.
> Das ist nicht richtig. Bei *Objekten* habe ich durchaus Daten, die ich
> nicht unbedingt im Quellcode finde. Bei statischen Klassen hingegen
> steht alles im Quellcode. Sonst sind sie ja nicht statisch. Eine
> statische Klasse hat keine Klassen-Variablen.

Mag sein dass ich mich damals durch eine Diskussion ob HTTP::Response()=20
statisch oder dynamische sein soll habe beeinflussen lassen, damals war=20
ich für dynamisch, aber am Ende wurde die Klasse statisch implementiert=
:

http://cvs.php.net/viewvc.cgi/pecl/http/docs/functions.html? view=3Dco#htt=
p_response_object.c

Man kann halt eine statische Klasse mit statischen Methoden und=20
Eigenschaften genau so verwenden wie ein Singleton Objekt, halt mit=20
etwas anderer Syntax (:: statt ->, und in der Klasse self statt $this).

>> Aber wozu gibt es dann "static" für Eigenschaften?
> Innerhalb von Funktionen/Methoden erlaubt static das 'Überleben' der
> Werte über die Lebensdauer der Funktion hinaus. Was static bei
> Klassen-Eigenschaften soll, ist mir allerdings auch schleierhaft.

Naja, wie so oft muss sowas ja nicht richtig sein, nur weil es mehr oder =

weniger zufällig möglich ist ;-)

>> Was ist an einem Singleton besser als an einer statischen Klasse?
>=20
> Ein Singleton kann variable Werte verwalten, eine statische Klasse nich=
t.

Kann schon, mit static properties und Zugriff per (self)::.

> Eben, Singleton und nicht statische Klasse. Ein Singleton braucht ja
> nicht übergeben zu werden, man 'holt' es sich. Eine statische Klasse =
ist
> letztlich nichts anderes als ein Namespace-Ersatz für Hilfsfunktionen=


Wie gesagt, meine statische Klasse ist in meinen Augen von der=20
Funktionalität genau so etwas wie ein Singleton.

Aber vermutlich "macht man das einfach nicht", OK, werde dann Singletons =

verwenden ;-)

Greift Du auf Singletons immer ganz normal über eine statische Methode =

zu, sowas wie

$singleton =3D Class::getInstance();

Oder woher holst Du Dir das Singleton Objekt aus irgendeinem anderen=20
Objekt heraus?


Viele Grüße
Andreas

Re: var_dump() für statische Klasse?

am 08.11.2006 16:23:44 von Niels Braczek

Andreas Korthaus schrieb:
> Niels Braczek schrieb:

>> Bei *Objekten* habe ich durchaus Daten, die ich
>> nicht unbedingt im Quellcode finde. Bei statischen Klassen hingegen
>> steht alles im Quellcode. Sonst sind sie ja nicht statisch. Eine
>> statische Klasse hat keine Klassen-Variablen.
>=20
> Mag sein dass ich mich damals durch eine Diskussion ob HTTP::Response()=
=20
> statisch oder dynamische sein soll habe beeinflussen lassen, damals war=
=20
> ich für dynamisch, aber am Ende wurde die Klasse statisch implementie=
rt:
>=20
> http://cvs.php.net/viewvc.cgi/pecl/http/docs/functions.html? view=3Dco#h=
ttp_response_object.c
>=20
> Man kann halt eine statische Klasse mit statischen Methoden und=20
> Eigenschaften genau so verwenden wie ein Singleton Objekt, halt mit=20
> etwas anderer Syntax (:: statt ->, und in der Klasse self statt $this).=


Sobald die Klasse *variable* Eigenschaften hat, ist sie nicht mehr
*statisch*.

>>> Was ist an einem Singleton besser als an einer statischen Klasse?
>>=20
>> Ein Singleton kann variable Werte verwalten, eine statische Klasse nic=
ht.
>=20
> Kann schon, mit static properties und Zugriff per (self)::.

Nein, sie ist dann nicht mehr statisch. Es wird nur nur die statische
Syntax benutzt.

>> Eben, Singleton und nicht statische Klasse. Ein Singleton braucht ja
>> nicht übergeben zu werden, man 'holt' es sich. Eine statische Klasse=
ist
>> letztlich nichts anderes als ein Namespace-Ersatz für Hilfsfunktione=
n.
>=20
> Wie gesagt, meine statische Klasse ist in meinen Augen von der=20
> Funktionalität genau so etwas wie ein Singleton.
>=20
> Aber vermutlich "macht man das einfach nicht",

Genau. Es mag syntaktisch möglich sein, ist aber semantisch falsch.

> OK, werde dann Singletons verwenden ;-)

;-)

> Greift Du auf Singletons immer ganz normal über eine statische Method=
e=20
> zu, sowas wie
>=20
> $singleton =3D Class::getInstance();

Genau so.

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 =
|
------------------------------------------------------------ ------