ID: 24915 Updated by: [EMAIL PROTECTED] Reported By: tater at potatoe dot com -Status: Open +Status: Bogus Bug Type: Zend Engine 2 problem Operating System: OS X 10.2 PHP Version: 5CVS-2003-08-02 (dev) New Comment:
>From ZEND_CHANGES: * Private and Protected Members. The Zend Engine 2.0 introduces private and protected member variables. Note that for performance reasons no error message is emitted in case of an illegal access to a private or protectecd member variable. Previous Comments: ------------------------------------------------------------------------ [2003-10-19 13:49:41] myle34 at hotmail dot com Another solution could be to make an issetFoo($variable) function: class foo { ... public function issetFoo($variable) { $variable = '_'.$variable; if (isset($this->$variable)) { return(TRUE); } return(FALSE); } } that should work... ------------------------------------------------------------------------ [2003-09-13 20:50:56] myle34 at hotmail dot com I have the same problem. What I would ideally like it to do is for isset to check whether it gets a legitimate (not NULL) value from __get() and then decide whether the variable passed to isset is set or not. An alternative could be to have an isset_get or something to check that it gets a good (not NULL) value returned from the __get() function. ------------------------------------------------------------------------ [2003-08-02 07:12:58] tater at potatoe dot com Description: ------------ Given a "property" that is really being handled by __get() and __set() functions, you are allowed to use it with empty() and isset() without errors or warnings, but they always report that the property is empty/not-set. I understand that this may not be a bug, but a "feature" of PHP 5 - i.e., just the way it works - but if that is true, please be kind enough to say so explicitly. It is not helpful to mark bugs as Bogus with comments like "I suggest you read ZEND_CHANGES :)" If it is to be expected, it might be good to throw the same kind of error that one would see if trying to use empty() on a function call, if that's possible. This is possibly related to bug #24436. Reproduce code: --------------- class foo { private $_x; private function __get($p) { return $this->_x; } private function __set($p,$v) { $this->_x = $v; } } $y = new foo; $y->x = 12; if (empty($y->x)) print "y->x is empty: {$y->x} \n"; else print "y->x is not empty: {$y->x} \n"; if (isset($y->x)) print "y->x is set: {$y->x} \n"; else print "y->x is not set: {$y->x} \n"; Expected result: ---------------- y->x is not empty: 12 y->x is set: 12 Actual result: -------------- y->x is empty: 12 y->x is not set: 12 ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=24915&edit=1