Testing if property exists
I read on php docs that isset()
is faster than property_exists()
and we should use a combination of both like
if (isset($this->fld) || property_exists($this, 'fld')) {
But why can't I just use isset then?
if (isset($this->fld)) {
Solution 1:
Because property_exists
will tell you if its even a defined property of the class/object where as isset doesnt make that distinction. for example:
class A {
protected $hello;
}
class B {
}
using property_exists($this, 'hello')
in class A will return true
, while using it in class B will return false
. isset
will return false
in both instances.
Solution 2:
It depends on how your program is done, but if you read the comments in the manual it will help with explaining idiosyncrasies of a function.
http://php.net/manual/en/function.property-exists.php
The important part is here:
The documentation leaves out the important case of new properties you add to objects at run time. In fact, property_exists will return true if you ask it about such properties.