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?
new Restriction(Criteria::EQUAL, 'pk_user', 'fk_user'));
new Restriction(Criteria::EQUAL, 'pk_user', 'værdi'));
Med special klasser på typen LikeRestriction:
$c = new Criteria('project');
$c->add(new StartsWithRestriction('name', 'Fritz'))
->add(
new GreaterEqualRestriction('age', 10),
// adds OR instead of AND, when adding multiple restrictions in one function call.
new IsNUllRestriction('age')
)
->join(new Criteria('user'), new EqualRestriction('pk_user', 'fk_user'));
Med hjælpe funktioner på typen: type_restriction, criteria:
$c = criteria('project');
$c->add(starts_with_restriction('name', 'Fritz'))
->add(
greater_equal_restriction('age', 10),
// adds OR instead of AND, when adding multiple restrictions in one function call.
is_null_restriction('age')
)
->join(criteria('user'), equal_restriction('pk_user', 'fk_user'));
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:
new Criteria(<<<S
table project
restrctions
like name 'Fritz'
greate equal age 10
is null age
join
user
restiction
equal pk_user fk_user
S;)
Indlæg senest redigeret d. 01.04.2011 11:13 af Bruger #5620