note 119410 added to closure.bindto

From: Date: Tue, 31 May 2016 04:44:38 +0000
Subject: note 119410 added to closure.bindto
Groups: php.notes 
Request: Send a blank email to php-notes+get-205624@lists.php.net to get a copy of this message
Access private members of parent classes; playing with the scopes: <?PHP class Grandparents{ private $__status1 = 'married'; } class Parents extends Grandparents{ private $__status2 = 'divorced'; } class Me extends Parents{ private $__status3 = 'single'; } $status1_3 = function() { $this->__status1 = 'happy'; $this->__status2 = 'happy'; $this->__status3 = 'happy'; }; $status1_2 = function() { $this->__status1 = 'happy'; $this->__status2 = 'happy'; }; // test 1: $c = $status1_3->bindTo($R = new Me, Parents::class); #$c(); // Fatal: Cannot access private property Me::$__status3 // test 2: $d = $status1_2->bindTo($R = new Me, Parents::class); $d(); var_dump($R); /* object(Me)#5 (4) { ["__status3":"Me":private]=> string(6) "single" ["__status2":"Parents":private]=> string(5) "happy" ["__status1":"Grandparents":private]=> string(7) "married" ["__status1"]=> string(5) "happy" } */ // test 3: $e = $status1_3->bindTo($R = new Me, Grandparents::class); #$e(); // Fatal: Cannot access private property Me::$__status3 // test 4: $f = $status1_2->bindTo($R = new Me, Grandparents::class); $f(); var_dump($R); /* object(Me)#9 (4) { ["__status3":"Me":private]=> string(6) "single" ["__status2":"Parents":private]=> string(8) "divorced" ["__status1":"Grandparents":private]=> string(5) "happy" ["__status2"]=> string(5) "happy" } */ ?> Clear the stack trace: <?PHP use Exception; use ReflectionException; $c = function() { $this->trace = []; }; $c = $c->bindTo($R = new ReflectionException, Exception::class); $c(); try { throw $R; } catch(ReflectionException $R) { var_dump($R->getTrace()); } /* array(0) { } */ ?> ---- Server IP: 72.52.91.14 Probable Submitter: 109.91.60.136 ---- Manual Page -- http://php.net/manual/en/closure.bindto.php Edit -- https://master.php.net/note/edit/119410 Del: integrated -- https://master.php.net/note/delete/119410/integrated Del: useless -- https://master.php.net/note/delete/119410/useless Del: bad code -- https://master.php.net/note/delete/119410/bad+code Del: spam -- https://master.php.net/note/delete/119410/spam Del: non-english -- https://master.php.net/note/delete/119410/non-english Del: in docs -- https://master.php.net/note/delete/119410/in+docs Del: other reasons-- https://master.php.net/note/delete/119410 Reject -- https://master.php.net/note/reject/119410 Search -- https://master.php.net/manage/user-notes.php

« previous php.notes (#205624) next »