你如何比较包含`Closure`的类?

时间:2015-04-09 15:38:01

标签: php php-closures

那么,如何比较包含Closure的类?看起来你不能。

class a {
    protected $whatever;
    function __construct() {    
        $this->whatever = function() {};
    }
}

$b = new a();
$c = new a();

var_dump( $b == $c );   //false

1 个答案:

答案 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)