那么,如何比较包含Closure
的类?看起来你不能。
class a {
protected $whatever;
function __construct() {
$this->whatever = function() {};
}
}
$b = new a();
$c = new a();
var_dump( $b == $c ); //false
答案 0 :(得分:1)
你可以直接关闭serialize()
,但是你可以做一个解决方法,因为serialize()
在序列化对象时会调用__sleep()
,所以它给出了清理东西的选项!这就是我们在这里所做的:
class a {
protected $whatever;
function __construct() {
$this->whatever = function() {};
}
public function __sleep() {
$r = [];
foreach ($this as $k => $v){
if (!is_array($v) && !is_string($v) && is_callable($v))
continue;
$r[] = $k;
}
return $r;
}
}
现在您可以使用serialize()
和md5()
来比较您的对象:
var_dump(md5(serialize($b)) === md5(serialize($c)));
输出:
bool(true)