Heeft PHP de mogelijkheid om enumeraties (opsommingen) te definieren?
(Anders dan door twintig define()'s op te nemen?)
--
Branko Collin
if you reply by e-mail, please change invalid to nl and z to s
(but replies to the news group are preferred)
Likes: 0
Heeft PHP de mogelijkheid om enumeraties (opsommingen) te definieren?
(Anders dan door twintig define()'s op te nemen?)
--
Branko Collin
if you reply by e-mail, please change invalid to nl and z to s
(but replies to the news group are preferred)
Branko Collin <branko@mixedflavourz.invalid> wrote:
> Heeft PHP de mogelijkheid om enumeraties (opsommingen) te definieren?
> (Anders dan door twintig define()'s op te nemen?)
Wat heeft een enumeratie te maken met defines? Ik zou voor een
enumeration persoonlijk een array/hash gebruiken in PHP.
--
Daniel Tryba
Daniel Tryba wrote:
> Branko Collin <branko@mixedflavourz.invalid> wrote:
>> Heeft PHP de mogelijkheid om enumeraties (opsommingen) te definieren?
>> (Anders dan door twintig define()'s op te nemen?)
>
> Wat heeft een enumeratie te maken met defines? Ik zou voor een
> enumeration persoonlijk een array/hash gebruiken in PHP.
Een enumeratie is toch een gelijktijdige declaratie van een aantal
constanten? Voor een declaratie van 1 constante gebruik je in PHP de
functie define().
> Ik zou voor een enumeration persoonlijk een array/hash gebruiken in PHP.
Dat kan natuurlijk ook, ik neem even aan dat PHP expressief genoeg is om
een array global te verklaren over alle scripts.
Branko Collin <branko@mixedflavourz.invalid> wrote:
>> Wat heeft een enumeratie te maken met defines? Ik zou voor een
>> enumeration persoonlijk een array/hash gebruiken in PHP.
>
> Een enumeratie is toch een gelijktijdige declaratie van een aantal
> constanten?
Ik breng enumeratie in verband met java.util.Enumerations wat het
dichts bij komt in PHP is de for/foreach/list/each functionaliteit.
>> Ik zou voor een enumeration persoonlijk een array/hash gebruiken in PHP.
>
> Dat kan natuurlijk ook, ik neem even aan dat PHP expressief genoeg is om
> een array global te verklaren over alle scripts.
$GLOBALS is een super global array, daar kan je dus je spullen in kwijt.
--
Daniel Tryba
Daniel Tryba wrote:
> Branko Collin <branko@mixedflavourz.invalid> wrote:
>>> Wat heeft een enumeratie te maken met defines? Ik zou voor een
>>> enumeration persoonlijk een array/hash gebruiken in PHP.
>>
>> Een enumeratie is toch een gelijktijdige declaratie van een aantal
>> constanten?
>
> Ik breng enumeratie in verband met java.util.Enumerations wat het
> dichts bij komt in PHP is de for/foreach/list/each functionaliteit.
Een enumeratie is bijvoorbeeld als je een datatype Fruit hebt, en een
variabele van dat datatype de waarde Appel, Peer of Banaan kan
hebben. In java zou je dat bijvoorbeeld zo doen (wellicht kan het ook zo
in php):
class Fruit{
public static final Fruit APPEL = new Fruit(1);
public static final Fruit PEER = new Fruit(1);
public static final Fruit BANAAN = new Fruit(1);
private int a;
private Fruit(int i){
a = i;
}
public bool equals(Fruit e){
return (this.a = e.a);
}
}
en dan ergens in de code
Fruit x = Fruit.APPEL
en ergens met Fruit x en y
if (x.equals(y)){....}
etc
Mark
Marcus wrote:
>> Ik breng enumeratie in verband met java.util.Enumerations wat het
>> dichts bij komt in PHP is de for/foreach/list/each functionaliteit.
>
> Een enumeratie is bijvoorbeeld als je een datatype Fruit hebt, en een
> variabele van dat datatype de waarde Appel, Peer of Banaan kan
> hebben.
Maar in een taal als php, waar weinig met datatypes wordt gedaan, is het
volgens mij nauwelijks zinnig.
--
Inca
JA - Wel integratie
NEE - Niet met buitenlanders
http://www.poldermodelstickers.nl/
Inca wrote:
> Marcus wrote:
>>> Ik breng enumeratie in verband met java.util.Enumerations wat het
>>> dichts bij komt in PHP is de for/foreach/list/each functionaliteit.
>>
>> Een enumeratie is bijvoorbeeld als je een datatype Fruit hebt, en een
>> variabele van dat datatype de waarde Appel, Peer of Banaan kan
>> hebben.
>
> Maar in een taal als php, waar weinig met datatypes wordt gedaan, is het
> volgens mij nauwelijks zinnig.
Dat een taal het in de hand werkt slordig te werken hoeft nog geen reden
te zijn dat ook te doen.
Mark
Marcus wrote:
> Inca wrote:
>> Marcus wrote:
>>>> Ik breng enumeratie in verband met java.util.Enumerations wat het
>>>> dichts bij komt in PHP is de for/foreach/list/each functionaliteit.
>>>
>>> Een enumeratie is bijvoorbeeld als je een datatype Fruit hebt, en
>>> een variabele van dat datatype de waarde Appel, Peer of Banaan kan
>>> hebben.
>>
>> Maar in een taal als php, waar weinig met datatypes wordt gedaan, is
>> het volgens mij nauwelijks zinnig.
>
> Dat een taal het in de hand werkt slordig te werken hoeft nog geen
> reden te zijn dat ook te doen.
Ik ben geen echte programmeur, dus doe ik netjes wat me op school is
geleerd.
enum KANFIETSEN=1, KANZWEMMEN=2, KANVETERSSTRIKKEN=4, KANBROODJESSMEREN=8;
$persoon[0] = KANFIETSEN or KANZWEMMEN;
$persoon[1] = KANZWEMMEN or KANVETERSSTRIKKEN;
$persoon[2] = KANVETERSSTRIKKEN or KANBROODJESSMEREN;
// bedenk zelf de loop erbij
if ($persoon[$i] or KANZWEMMEN == $persoon[$i])
{
access_zwembad($persoon[$i]);
}
// Bedankt voor de tips.
Branko Collin wrote:
> Marcus wrote:
>> Inca wrote:
>>> Marcus wrote:
>>>>> Ik breng enumeratie in verband met java.util.Enumerations wat het
>>>>> dichts bij komt in PHP is de for/foreach/list/each functionaliteit.
>>>>
>>>> Een enumeratie is bijvoorbeeld als je een datatype Fruit hebt, en
>>>> een variabele van dat datatype de waarde Appel, Peer of Banaan kan
>>>> hebben.
>>>
>>> Maar in een taal als php, waar weinig met datatypes wordt gedaan, is
>>> het volgens mij nauwelijks zinnig.
>>
>> Dat een taal het in de hand werkt slordig te werken hoeft nog geen
>> reden te zijn dat ook te doen.
>
> Ik ben geen echte programmeur, dus doe ik netjes wat me op school is
> geleerd.
>
[knip enumeraties]
Je hebt geen OO geleerd?
$persoon[$i].kanzwemmen = true
if ($persoon[$i].kanzwemmen){
etc.
Mark
Marcus wrote:
> Branko Collin wrote:
>> Ik ben geen echte programmeur, dus doe ik netjes wat me op school is
>> geleerd.
>>
> [knip enumeraties]
>
> Je hebt geen OO geleerd?
>
> $persoon[$i].kanzwemmen = true
>
> if ($persoon[$i].kanzwemmen){
Jawel, maar dat heb ik altijd een slecht systeem gevonden. Vooral het idee
van data hiding lijkt nogal zwaar te steunen op de (over het algemeen 95%
afwezige) documenteerkwaliteiten van degene die de objecten bedenkt en
implementeert.
Waarschijnlijk een overtrokken reactie van mij, maar leer me nu nog maar
eens nieuwe streken. :-)
Branko Collin wrote:
>
> Marcus wrote:
>> Branko Collin wrote:
>
>>> Ik ben geen echte programmeur, dus doe ik netjes wat me op school is
>>> geleerd.
>>>
>> [knip enumeraties]
>>
>> Je hebt geen OO geleerd?
>>
>> $persoon[$i].kanzwemmen = true
>>
>> if ($persoon[$i].kanzwemmen){
>
> Jawel, maar dat heb ik altijd een slecht systeem gevonden. Vooral het idee
> van data hiding lijkt nogal zwaar te steunen op de (over het algemeen 95%
> afwezige) documenteerkwaliteiten van degene die de objecten bedenkt en
> implementeert.
Over het algemeen documenteert OO zichzelf meer dan gewoon
procedureel. Ik kan de meeste objecten in een keer overzien, dat is bij
een lange listing van honderden regels wel anders.
Mark
Marcus <mark@ijbema.xs4all.nl.invalid> wrote:
>> Ik breng enumeratie in verband met java.util.Enumerations wat het
>> dichts bij komt in PHP is de for/foreach/list/each functionaliteit.
>
> Een enumeratie is bijvoorbeeld als je een datatype Fruit hebt, en een
> variabele van dat datatype de waarde Appel, Peer of Banaan kan
> hebben. In java zou je dat bijvoorbeeld zo doen (wellicht kan het ook zo
> in php):
>
> class Fruit{
> public static final Fruit APPEL = new Fruit(1);
> public static final Fruit PEER = new Fruit(1);
> public static final Fruit BANAAN = new Fruit(1);
[knip]
> }
Aha, enums! Helemaal over het hoofd gezien. Bovenstaande voorbeeld moet
wellicht nog wel te doen zijn in PHP.
--
Daniel Tryba
Daniel Tryba wrote:
>> Dat kan natuurlijk ook, ik neem even aan dat PHP expressief genoeg
>> is om een array global te verklaren over alle scripts.
>
> $GLOBALS is een super global array, daar kan je dus je spullen in
> kwijt.
Nadeel is dat je elke keer zo'n hele lelijke en onoverzichtelijke
constructie krijgt. En dat is vaak een belangrijke reden om constanten te
gebruiken.
Ik heb lang gezocht maar er is niet echt een lekkere oplossing: constanten
kunnen alleen scalars zijn, geen arrays, geen enums. (In Php 5 misschien?)
Dus zit je aan een extra $GLOBAL['arr']['iets'] vast of een extra global in
elke functie.
--
Inca
NEE - Geen buitenlanders
JA - Wel shoarma
http://www.poldermodelstickers.nl/
Inca <shadow*movements@wanadoo.nospam.invalid> wrote:
>> $GLOBALS is een super global array, daar kan je dus je spullen in
>> kwijt.
>
> Nadeel is dat je elke keer zo'n hele lelijke en onoverzichtelijke
> constructie krijgt. En dat is vaak een belangrijke reden om constanten te
> gebruiken.
> Ik heb lang gezocht maar er is niet echt een lekkere oplossing: constanten
> kunnen alleen scalars zijn, geen arrays, geen enums. (In Php 5 misschien?)
> Dus zit je aan een extra $GLOBAL['arr']['iets'] vast of een extra global in
> elke functie.
De oplossing zoals Marcus die gaf werkt prima (na enig herschrijven voor
PHP implementatie van OO). Namelijk ongeacht van de daadwerkelijk
oplossing die in een file te includen welke deze oplossing bevat, met
een class kan je dan mooi een namespace met statische waarden
definieren, zo ben je ook meteen van die lelijke defines af.
Veel viezers dan een define bestaat namelijk niet in PHP. Ze zijn immers
globaal, vanwege "backward" compatibility (en dan heb ik het niet over
de tegenpool van forwards compatible) word slordig omspringen van
ontwikkelaars met "variablen" automatisch gecorrigeerd, bv: $_GET[foob]
wordt gecorrigeerd naar $_GET['foob'] indien er geen constante genaamt
'foob' is, en alleen primitieven bevatten.
MAW OO is in dit (en veel andere) gevallen de oplossing.
--
Daniel Tryba
Daniel Tryba wrote:
> De oplossing zoals Marcus die gaf werkt prima (na enig herschrijven
> voor PHP implementatie van OO).
't Is nogal overkill toch, voor zoiets simpels? Plus dat ik een grote hekel
heb aan dergelijke dingen - voor mij volstrekt onoverzichtelijk. Je hebt 8
regels nodig voor iets wat in bv c++ mogelijk is op 1 (Jawel: enums)
> Veel viezers dan een define bestaat namelijk niet in PHP. Ze zijn
> immers globaal,
Het zou leuk zijn om dat aan te kunnen geven maar verder vind ik het ideaal.
Het idee van lokale consts is me ook nog niet helemaal duidelijk eigenlijk.
> word slordig omspringen van
> ontwikkelaars met "variablen" automatisch gecorrigeerd, bv:
> $_GET[foob] wordt gecorrigeerd naar $_GET['foob'] indien er geen
> constante genaamt 'foob' is, en alleen primitieven bevatten.
Dat laatste (alleen primitieven) is een groot probleem, voor het eerste
wordt netjes gewaarschuwd.
--
Inca
NEE - Geen kandidaat
JA - Wel nieuwe NAVO topman
http://www.poldermodelstickers.nl/