Nogle er PHP lidt af en hurdle...

Tags:    php criteria objekter kodedesign

Nogle gange kan PHP sgu godt være lidt af en forhindring, når man skal prøve at lave noget nyt. :)
OR og AND er jo reserverede ord i PHP, så dem kan man naturligvis ikke lave om til konstanter...

Nedestående er fiktivt og ønsketænkning...

Fold kodeboks ind/udPHP kode 




Indlæg senest redigeret d. 31.03.2011 22:16 af Bruger #10216
At overskrive reserveret ord er vel ikke unikt for PHP. Kan faktisk ikke lige komme på noget sprog der vil lade dig gøre det.

Man kunne så mene at det ikke burde give et problem i klasse konstanter.

Alternativt kunne du jo bare sætte en _ foran dem eller efter dem.

En anden mulighed er at lave det til klasse variabler:

Restriction:: $OR er fuldt lovligt. (mellemrummet skyldes smily.)

Fold kodeboks ind/udKode 


Men det i princippet det samme som at skrive et $ foran alt bare muligvis en anelse mindre effektivt.



Ved ikke om det var noget i retning af det følgende du havde tænkt dig at kunne skrive. Personligt har jeg aldrig rigtig forstået pointen i at prøve at undgå at skrive SQL. Men kan da godt se at det nedenstående lettere kunne flyttes til andre database sprog og evt. lettere kunne testes for korrekthed.

Fold kodeboks ind/udKode 


Det bagved læggende:
Fold kodeboks ind/udKode 




Indlæg senest redigeret d. 30.03.2011 14:25 af Bruger #5620
Lav statiske funktioner der eventuelt refererer til klassevariabler.

Så vil dit scenarie se således ud:

Fold kodeboks ind/udKode 


Alternativt kan du lave hver funktion til et factory der returnerer et objekt.

Fold kodeboks ind/udKode 




Det vil ikke virke. Du kan ikke navngive klasser, funktioner, konstanter efter et reserveret ord. Du kan navngive variabler efter reserveret ord.


I hvertfald ikke i min version af PHP.



Det er sandt, det var også primært et build-up til factory-fremgangsmåden. Man kan altid omdøbe funktionerne til at hedde noget andet.



hehe... ja man kan komme frem til nogle mystiske opstillinger...

person, dit forslag er udemærket. Desværre går det imod al logisk navngivning. Ved at sætte en underscore foran metode navnet, indikerer man at metoden kun kan kaldes internt i klassen.

Men jeg er kommet frem til noget der måske kan gå:
Fold kodeboks ind/udPHP kode 


Hvis i kan være behjælpelige, med opstilling af mulige problemer - så bare giv gas. Jo mere jeg kan få afdækket des bedre.



Indlæg senest redigeret d. 31.03.2011 22:18 af Bruger #10216
jeg ville nok i hvertfald lave hjælpe funktioner så man undgår at skulle skrive new hele tiden.

Jeg antog da jeg læste den post at criteria omhandlede delen efter et 'WHERE ...' i for eksempel sql. Derfor virker en join på criteria lettere mystisk.

Endnu få at undgå at skrive super lang kode ville jeg nok også opretter special klasser, enten formen TypeRestriction eller RestrctionType:
OrRestriction eller RestrictionOr.

Umiddelbart kan jeg ikke lide at man selv skal huske at sætte % i din like erklæring. Og hvordan ser din restriction forskel på om jeg ønsker at sammenligne et felt med en tekst eller to felter?
Fold kodeboks ind/udKode 





Med special klasser på typen LikeRestriction:
Fold kodeboks ind/udKode 


Med hjælpe funktioner på typen: type_restriction, criteria:
Fold kodeboks ind/udKode 


Angående _ i starten så er det rigtigt at de normalt bruges til at angive private/protected. Men skrev at du kunne sætte dem efter. Eneste anden mulighed er vel at rette i selve fortolkeren til PHP :). Kan ikke se hvorfor det skulle være ulovligt at give en klasse konstant et beskyttet ord. Der komme altid :: foran dem når de bruges, og det giver ingen mening at sige $this:: or 4. Ved faktisk ikke om eller hvor man kan få koden til php.

En helt fjerde og lettere vanvittig ide er, at lave et DSL af en art, men så er du tilbage hvor du startede med noget der ligner SQL:
Fold kodeboks ind/udKode 








Indlæg senest redigeret d. 01.04.2011 11:13 af Bruger #5620
t