<?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, 則該屬性會被修改, **/