Reputation: 944
With E_NOTICE
error messages enabled, PHP doesn't like the following code, unless the variables $mdDialog
and $mdToast
have already been defined:
if ($mdDialog || $mdToast) {
$ngMaterial = true;
}
To avoid E_NOTICE
error, I must write:
if (isset($mdDialog) || isset($mdToast)) {
$ngMaterial = true;
}
The problem is that, with the above code, if I have a $mdDialog = false;
line somewhere earlier, the statement will be truthy, which is not the idea. To avoid this, I'd have to write:
if ((isset($mdDialog) && $mdDialog) || (isset($mdToast) && $mdToast)) {
$ngMaterial = true;
}
And this is sooo much longer and feels excessive, only to avoid the E_NOTICE message.
So, the question is, should I care about these E_NOTICE
messages? Is there anything bad with checking the value of a variable that may not exist?
Upvotes: 1
Views: 183
Reputation: 53573
You're always better off avoiding generating notices than setting error_reporting()
to ignore them. That said, in cases like this, it's almost always easier to make sure that the vars are set at the start than it is to check that they're set every place you refer to them. I.e., the var never gets set for the false condition if you do something like this:
if (some condition) {
$flag = true;
}
Instead do something like this:
if (some condition) {
$flag = true;
} else {
$flag = false;
}
Or this:
$flag = false;
if (some condition) {
$flag = true;
}
Or this:
$flag = (some condition) ? true : false;
Or this:
$flag = (bool) (some condition);
Now you don't need isset()
or empty()
, and when you get an E_NOTICE
, it's actually meaningful.
Upvotes: 0
Reputation: 570
Or if the variable is a string you can also use this:
if(strlen($mdDialog) < 1 || strlen($mdToast) < 1){
$ngMaterial = true;
}
Upvotes: 1
Reputation: 4850
empty
can be useful in this case. Like below:
if (!empty($mdDialog) || !empty($mdToast)) {
$ngMaterial = true;
}
Read more about empty.
Upvotes: 4