First off I know this question has gone around more than once here:
But the more that I fix all E_NOTICEs (as people say you should) the more I notice that:
- I am micro-optimising
- I am actually making more code and making my code harder to mantain and slower
Take an example:
Say your using the MongoDB PHP driver and you have a MongoDate
object in a class var named ts
within a class that represents a single row in a collection in your database. Now you acces this var like: $obj->ts->sec
but PHP throws a fit (E_NOTICE) because ts
in this case is not defined as an object in itself because this particular row does not have a ts
field. So you think this is OK, this is desired behaviour, if it's not set return null and I will take care of it myself outside of the interpreters own robotic workings (since you wrap this in a date()
function that just returns 1970
if the var is null
or a none-object
).
But now to fix that E_NOTICE as another developer really wants me to since having ANY E_NOTICEs is terribad and it makes the code slower to not do it according to the errors. So I make a new function in the $obj
class called getTs
and I give it 3 lines, literally to do nothing but check if the ts
var is a MongoDate
object and return it if it is...
WHY? Can't PHP do this perfectly fine for me within its much faster interpreter than having to do it within the runtime of the app itself? I mean every where I am having to add useless bumpth to my code, pretty much empty functions to detect variables that I actually just handle with PHPs own ability to return null
or checking their instanceof
when I really need to (when it is vital to the operation and behaviour of the said function) and don't get me started on the isset()
s I have added about 300 lines of isset()
s, it's getting out of hand. I have of course got to make this getTs
functions because you can't do:
class obj{
public $ts = new MongoDate();
}
I would either have to store the ts
within the __constructor
(which I am not too happy about either, I am using a lot of magics as it is) or use a function to detect if it's set (which I do now).
I mean I understand why I should fix:
- Undefined vars
- Assigning properties of unset vars (
null
vars) - constant errors etc
But if you have tested your code and you know it is safe and will only work the way you desire what is the point in fixing all of the undefined index
or none-object
errors? Isn't adding a bunch of isset()
s and 2 lines functions to your code actually micro-optimisation?
I have noticed after making half my site E_NOTICE compliant that actually it uses more CPU, memory and time now...so really what's the point of dealing with every E_NOTICE error and not just the ones that ARE errors?
Thanks for your thoughts,