ID: 36214 Updated by: [EMAIL PROTECTED] Reported By: pexu at lyseo dot edu dot ouka dot fi -Status: Open +Status: Assigned Bug Type: Scripting Engine problem Operating System: Windows XP PHP Version: 5.1.2 -Assigned To: +Assigned To: dmitry
Previous Comments: ------------------------------------------------------------------------ [2006-02-02 16:04:32] [EMAIL PROTECTED] That it works in the latter case is just a side affect which falls under "undefined behaviour". You should actually see an error telling you that __get() can't return a reference or that array_push() wants a reference. IIRC it's fixed in current CVS, could you please try? Where "fixed" means that an error is generated. Thanks. ------------------------------------------------------------------------ [2006-02-02 14:08:59] pexu at lyseo dot edu dot ouka dot fi Even overload::$array is defined as public variable, actual result remains the same. But if I change conditional operator to normal if .. else clause, problem disappers! So: function __get ($key) { if (isset($this->array[$key])) return $this->array[$key]; else return null; } works just fine. So the actual problem can't be a private property which is accessed outside the class, right? ------------------------------------------------------------------------ [2006-01-30 19:43:18] [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 You're trying to acces a private property (arr) from outside the class. ------------------------------------------------------------------------ [2006-01-30 19:34:55] pexu at lyseo dot edu dot ouka dot fi Description: ------------ When both __set and __get are set, conditional operator "?" fails to work when used to return variables from __get when working with arrays. A normal if .. else clause however works fine. With non-array variables there's no problem, either. If __set is not used, this bug doesn't seem to appear. Reproduce code: --------------- class overload { private $array = array(); public function __set($key, $value) { $this->array[$key] = $value; } public function __get($key) { return isset($this->array[$key]) ? $this->array[$key] : null; } } $ol = new overload; $ol->arr = array(); array_push($ol->arr, "element"); var_dump($ol->arr); Expected result: ---------------- array(1) { [0]=> string(7) "element" } Actual result: -------------- array(0) { } ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=36214&edit=1