note 119410 added to closure.bindto
| From: | luc at s dot illi dot be | 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