<?php class Grandparents{ private $__status1 = 'married'; } class Parents extends Grandparents{ private $__status2 = 'divorced'; } class Me extends Parents{ private $__status3 = 'single'; } class My extends Parents{ public $__status3 = 'my_status';} $status1_3 = function() { $this->__status1 = "happy"; $this->__status2 = "happy"; $this->__status3 = "happy"; }; $status1_2 = function() { $this->__status1 = "happy"; $this->__status2 = "happy"; }; // 因为指定了scope ,在parents scope是没有$this->__staatus3; $c = $status1_3->bindTo($R = new Me(),Parents::class); #$c(); // $c1 = $status1_3->bindTo($R = new Me(),Me::class); $c1(); var_dump($R); $c2 = $status1_2->bindTo($S = new Me(),Parents::class); $c2(); var_dump($S); $c3 = $status1_2->bindTo($T = new Me(),Me::class); $c3(); var_dump($T); var_dump(new My()); $c4 = $status1_3->bindTo($X = new My(),Parents::class); $c4(); var_dump($X); $c5 = $status1_3->bindTo($Y = new My(),My::class); $c5(); var_dump($Y); $c6 = $status1_3->bindTo($Z = new My(),Grandparents::class); $c6(); var_dump($Z); /** 总结 : 这个问题,须要考虑2个点 1 scope所在的层级,最后一个参数会限制闭包中$this的层级 2 scope所在层级中, 属性的可访问性 .若是$this 层级的属性的访问权限是非private, 则该属性会被修改, **/