我刚学习PHP不久,最近在看PHP自带的Observer设计模式的快速实现时候遇到了一个问题。
我发现PHP自己实现的SplObjectStorage类里所有的方法的body都是空的,我想模仿出一个storage的类,于是考虑着自己去实现attach方法。
问题来了
我先尝试写出观察者模式,实例化之后再输出类的结构:$observer = new Observer();//观察者
$subject = new Subject();//内部实例化了SplObjectStorage类
$subject->attach($observer);
print_r($subject);结果输出:
Subject Object ( 
    [observer:protected] => SplObjectStorage Object ( 
        [storage:SplObjectStorage:private] => Array ( 
            [000000007ded8f200000000054db3de3] => Array ( 
                [obj] => Observer Object ( ) [inf] => ) ) ) )
瞬间蒙了...attach之后storage存储的key似乎是两个16个长度的字符串拼接起来的,看起来有点像两个内存地址,从这里我也想到attach方法实现的难度了,key值必须是再当前情况下唯一的并且与实例化对象相关,这个是如何实现的呢,如何确定传过来的对象的identity呢。请各位大佬不吝赐教。