有个类是这样 ...
abstract class foo {
static private $bar;
static public function processor() {
// some logic
self::$bar = 'result';
}
static public function getBar() {
return self::$bar;
}
}
之前一直很美好很安全 ... foo::getBar()
的结果永远是只读且可信的 ...
结果现在新增了一个功能可以往一个定义好的类上面贴闭包 ...
$evil = Closure::bind( function() {
self::$bar = 'hijack!';
}, null, 'foo' );
$evil();
这就好像蚂蝗一样 ... 我完全无法控制这东西的权限 ...
之前我控制其他开发人员无法碰到 class foo 的定义 ... 这个类就是绝对安全的 ...
现在不行了 ... 任何人都可以随意修改 private 的内容 ...
于是求解 ... 贴闭包这个功能是为什么会产生的 ..? 原本这个功能想解决的问题是什么 ..?
以及我有没有一种方法可以指定一个类不能被贴 ..?