ID: 44370 User updated by: aldo at armiento dot com Reported By: aldo at armiento dot com Status: Bogus Bug Type: Class/Object related Operating System: Linux 2.6.18 PHP Version: 5.2.5 New Comment:
Hello Felipe, thanks for your time and accept my apologies. So if you need to 'unset' a class member without destroy the member class reference it you have to use $test->test = null instead of unset($test->test). I hoped that _a class member would be always remained such_ also after an 'unset' call. Thanks again, Aldo Previous Comments: ------------------------------------------------------------------------ [2008-03-08 15:47:20] [EMAIL PROTECTED] Thank you for taking the time to write to us, but this is not a bug. Please double-check the documentation available at http://www.php.net/manual/ and the instructions on how to report a bug at http://bugs.php.net/how-to-report.php This is expected, you are destroing the property. class foo { public $test; public function __construct() { $this->test = 1; } public function __set($a, $b) { print "set: $a\n"; } public function __get($a) { print "get: $a\n"; } } $test = new foo; print $test->test; unset($test->test); // destroy! print "\n"; $test->test = 'new property'; print $test->test; ------ 1 set: test get: test ------------------------------------------------------------------------ [2008-03-08 10:36:33] aldo at armiento dot com Description: ------------ Magic methods __set, __get, __isset, __unset are triggered also if a member exists if accessing member from a method used in a cURL callback function. >From the documentation instead "These methods will only be triggered when your object or inherited object doesn't contain the member or method you're trying to access". Reproduce code: --------------- <?php class Test { public $member; public function __set($sName, $mValue) { echo "__set() called\n"; } public function __get($sName) { echo "__get() called\n"; } public function __isset($sName) { echo "__isset() called\n"; } public function __unset($sName) { echo "__unset() called\n"; } public function headerCallBack($hCurl, $sHeader) { $this->member = 'value'; strtolower($this->member); isset($this->member); unset($this->member); return strlen($sHeader); } public function httpGet() { $hCurl = curl_init(); curl_setopt($hCurl, CURLOPT_URL, 'http://www.php.net/'); curl_setopt($hCurl, CURLOPT_RETURNTRANSFER, true); curl_setopt($hCurl, CURLOPT_HEADERFUNCTION, array($this, 'headerCallBack')); curl_exec($hCurl); } } $C = new Test(); $C->httpGet(); Expected result: ---------------- Nothing. Actual result: -------------- __set() called __get() called __isset() called __unset() called __set() called __get() called __isset() called __unset() called __set() called __get() called __isset() called __unset() called __set() called __get() called __isset() called __unset() called __set() called __get() called __isset() called __unset() called __set() called __get() called __isset() called __unset() called __set() called __get() called __isset() called __unset() called __set() called __get() called __isset() called __unset() called __set() called __get() called __isset() called __unset() called __set() called __get() called __isset() called __unset() called ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=44370&edit=1
