Door
Jan van der Veeken
op 09-07-2016 21:07
gewijzigd op 10-07-2016 08:55
2.158 views
$field = "user"; //Use field name for username
if(!$subuser strlen($subuser = trim($subuser)) == 0){
$form->setError($field, "* Username not entered");
Bij bovenstaande stukje script krijg ik de foutmelding unexpected identifier 'strlen' after variabele $subuser kan iemend zeggen wat hier fout is?
Ik weet niet wat TS heeft gedronken maar mogelijk lust ik hier ook wel wat van :).
Waarschijnlijk wilde deze controleren of:
- de variabele $subuser bestaat (maar dit is een interne variabele, je weet zelf, als programmeur, toch wel of deze bestaat of niet?), en zoja
- of de waarde van de getrimde variant (waarom trimde je niet meteen bij de creatie van $subuser?) een niet-lege string is
Maar hiermee controleer je vooral wat $subuser niet is. Mogelijk is het makkelijker/handiger om te controleren of $subuser wel aan bepaalde condities voldoet, zoals een patroon ofzo.
Ooh dus gewoon if (strlen(trim($subuser)) === 0) {
Maar ik ben het helemaal met Thomas eens dat dit een beetje de omgekeerde manier van werken is; whitelisting is altijd vele malen eenvoudiger dan blacklisting.
Het grappige is hier dat in theorie de toewijzing inderdaad zoals je doet technisch mogelijk werkt, in deze vorm:
if (strlen($subuser = trim($subuser)) === 0) {
Uiteraard niet getest, ik ben fel tegen het hebben van dit soort combinaties; side effects van dit soort binnen een if hebben altijd de neiging niet de uitwerking te hebben die je wilt, bijvoorbeeld door de toepassing van OR's etc icm lazy evaluation.
$field = "user"; //Use field name for username
if(!$subuser strlen($subuser = trim($subuser)) == 0){
$form->setError($field, "* Username not entered");
Na if(!$subuser heb je een gat van 4 spaties. Lijkt erop dat je daar een operator mist:
<?php
if (!$subuser || strlen($subuser = trim($subuser)) == 0) {
$form->setError($field, "* Username not entered");
}
?>
Logischer of op zijn minst beter leesbaar is dan:
<?php
if (!isset($subuser) || empty(trim($subuser))) {
$form->setError($field, "* Username not entered");
}
?>