anpera.net
https://anpera.homeip.net/phpbb3/

Konstanten in Klassendefinition
https://anpera.homeip.net/phpbb3/viewtopic.php?f=34&t=4459
Seite 1 von 1

Autor:  dragonslayer [ Fr 04 Apr, 2008 22:51 ]
Betreff des Beitrags:  Konstanten in Klassendefinition

Ich wollt meinen globalen Namenraum ein klein wenig aufräumen und somit einige zusammenhängende Konstanten + Methoden in einer Klasse kapseln.
Leider stoße ich bei den Konstanten (30 an der Zahl) auf ein Problem. Ich muss den Konstanten die Werte 2^0,2^1, 2^2, 2^3, ... zuweisen, damit ich sie anschließend als bitweise oder Verknüpfung nutzen kann.
Jetzt ist es natürlich einfach bei wenigen Konstanten
1,2,4,8,16 usw zu schreiben, aber bei 30 wirds eben schon etwas mehr. Ohne die Klassendefinition hab ich halt immer
define('CONST1',1);
define('CONST2',1<<1);
define('CONST3',1<<2);
define('CONST4',1<<3);
geschrieben. Das funktioniert in der Klassendefinition anscheinend nicht.
class xyz{
const CONST1 = 1<<1;
}
schmeisst einen Fehler.
Hab ich etwas übersehen? klappt das wirklich nicht? Gibts einen Workaround?

Autor:  Rikkarda [ Sa 05 Apr, 2008 00:21 ]
Betreff des Beitrags:  Re: Konstanten in Klassendefinition

Zitat:
Klassenkonstanten

Es ist möglich für jede Klasse konstante Werte zu definieren, die gleich und unabänderlich bleiben. Konstanten weichen darin von normalen Variablen ab, dass man nicht das $ Symbol benutzt, um sie zu deklarieren oder zu benutzen. Wie statische Member auch, kann auf konstante Werte nicht (mittels $object::constant) aus einer Instanz des Objektes heraus zugegriffen werden.

Der Wert kann nur ein konstanter Ausdruck sein, keine (zum Beispiel) Variablen, Klassenmamber, Ergebnisse einer mathematischen Operation oder Funktionsaufrufe.



quelle: http://phpforum.de/php/php-handbuch/sta ... tants.html

ich persönlich kenne leider keine Möglichkeit dies mit einer Rechenfunktion zu ermöglichen

Autor:  Eliwood [ Sa 05 Apr, 2008 00:41 ]
Betreff des Beitrags:  Re: Konstanten in Klassendefinition

Nein, leider kann man keine Ausdrücke verwenden bei der Variablendefinition. Allerdings könntest du die Zahlen in Hexadezimaler Schreibweise notieren:

$this->bbcode_second_pass_code('', '0x001
0x002
0x004
0x008
0x010
0x020
0x040
0x080
0x100
0x200
0x400
0x800
0x1000
0x2000
0x4000
0x8000
[...]')

Autor:  Nightborn [ Sa 05 Apr, 2008 09:16 ]
Betreff des Beitrags:  Re: Konstanten in Klassendefinition

Zitat:
Ich muss den Konstanten die Werte 1^0,1^1, 1^2, 1^3, ... zuweisen,


also das wäre das "hoch" oder Exponentialzeichen... und 1^0==1^234324234 übrigens... eins hoch irgendwas ist immer eins <.<
Eli hat schon den Code gelesen, und aufs Richtige geantwortet.

Du kannst übrigens wirklich problemlos 1,2,4,8,usw schreiben, und dann nachher in Hex auswerten.

Auszug aus Lotgd 1.x.x.

myDefine("SU_MEGAUSER",1);
myDefine("SU_EDIT_MOUNTS",2);
myDefine("SU_EDIT_CREATURES",4);
myDefine("SU_EDIT_PETITIONS",8);
myDefine("SU_EDIT_COMMENTS",16);
myDefine("SU_EDIT_DONATIONS",32);
myDefine("SU_EDIT_USERS",64);
myDefine("SU_EDIT_CONFIG",128);
myDefine("SU_INFINITE_DAYS",256);


(mydefine ist nur ein etwas anderes define)

Autor:  dragonslayer [ Sa 05 Apr, 2008 12:29 ]
Betreff des Beitrags:  Re: Konstanten in Klassendefinition

Ok, schade dass die Wertzuweisung eines arithmetischen Ausdrucks nicht funktioniert, aber ok, muss man mit leben.

@Eliwood Danke, die Hex Schreibweise 0x200000 ist doch um einiges übersichtlicher als 2097152 für den 21. Wert :-)

@Nightborn *klatschandiestirn* Narf, ich meinte ja auch 2^x , nicht 1^x :-)

Seite 1 von 1 Alle Zeiten sind UTC + 1 Stunde
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/