那么,您如何比较包含 的类Closure
?看起来你不能。
class a {
protected $whatever;
function __construct() {
$this->whatever = function() {};
}
}
$b = new a();
$c = new a();
var_dump( $b == $c ); //false
那么,您如何比较包含 的类Closure
?看起来你不能。
class a {
protected $whatever;
function __construct() {
$this->whatever = function() {};
}
}
$b = new a();
$c = new a();
var_dump( $b == $c ); //false
那么你不能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()
withmd5()
来比较你的对象,如下所示:
var_dump(md5(serialize($b)) === md5(serialize($c)));
输出:
bool(true)