$user = new User(1);
var_dump($user->ID);
if (empty($user->ID))
    echo "empty";
// output string(2) "77" empty
So why is empty() returning true even when $user var is not empty?
The relevant parts of my User class:
class User {
    protected $data = null;
    public function __construct($userID) {
        // sql select
        $this->data = $sqlResult;
    }
    // ...
    public function __get($name) {
        if (isset($this->data[$name]))
            return $this->data[$name];
        else
            return null;
    }
}
UPDATE:
So I updated my User class and added the __isset() method
public function __isset($name) {
        if (isset($this->data[$name]) && !empty($this->data[$name]))
                return true;
        else
                return false;
}
This leads me to another problem:
When calling empty() on my not empty var empty($user->ID) it will return false, but when using isset($user->ID) on a declared var which is empty (e.g. $user->ID = '') it will also return false, because isset() will call __isset() inside the class, right?
Is there a way to fix this behaviour? PHP notes, that I should copy the overloaded property into a local variable, which seems too much paperwork for me ;)
empty() doesn't call __get(). You need to implement __isset().
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With