在includes\modules\pages\子目录下的header_php.php中有很多$zco_notifier->notify这样的代码,跟踪代码,发现$zco_notifier对象最终是调用了includes\classes中的class.base.php.
class.base.php的具体代码如下:
<?php
class base {
function attach(&$observer, $eventIDArray) {
foreach($eventIDArray as $eventID) {
$nameHash = md5(get_class($observer).$eventID);
base::setStaticObserver($nameHash, array('obs'=>&$observer, 'eventID'=>$eventID));
}
}
function detach($observer, $eventIDArray) {
foreach($eventIDArray as $eventID) {
$nameHash = md5(get_class($observer).$eventID);
base::unsetStaticObserver($nameHash);
}
}
function notify($eventID, $paramArray = array()) {
$observers = & base::getStaticObserver();
if (!is_null($observers))
{
foreach($observers as $key=>$obs) {
if ($obs['eventID'] == $eventID) {
$obs['obs']->update($this, $eventID, $paramArray);
}
}
}
}
function & getStaticProperty($var)
{
static $staticProperty;
return $staticProperty;
}
function & getStaticObserver() {
return base::getStaticProperty('observer');
}
function & setStaticObserver($element, $value)
{
$observer = & base::getStaticObserver();
$observer[$element] = $value;
}
function & unsetStaticObserver($element)
{
$observer = & base::getStaticObserver();
unset($observer[$element]);
}
}
看了下程序流程,发现问题很多: notify方法调用了getStaticObserver(),getStaticObserver()调用了getStaticProperty(),而getStaticProperty()方法里面$staticProperty都没初始化,这样$observers==null是空的,那等于什么都没执行。
这个代码被调用的地方那么多,难道什么都没执行吗?很困惑,哪位大哥能解除我的疑惑啊!千恩万谢.
class.base.php的具体代码如下:
<?php
class base {
function attach(&$observer, $eventIDArray) {
foreach($eventIDArray as $eventID) {
$nameHash = md5(get_class($observer).$eventID);
base::setStaticObserver($nameHash, array('obs'=>&$observer, 'eventID'=>$eventID));
}
}
function detach($observer, $eventIDArray) {
foreach($eventIDArray as $eventID) {
$nameHash = md5(get_class($observer).$eventID);
base::unsetStaticObserver($nameHash);
}
}
function notify($eventID, $paramArray = array()) {
$observers = & base::getStaticObserver();
if (!is_null($observers))
{
foreach($observers as $key=>$obs) {
if ($obs['eventID'] == $eventID) {
$obs['obs']->update($this, $eventID, $paramArray);
}
}
}
}
function & getStaticProperty($var)
{
static $staticProperty;
return $staticProperty;
}
function & getStaticObserver() {
return base::getStaticProperty('observer');
}
function & setStaticObserver($element, $value)
{
$observer = & base::getStaticObserver();
$observer[$element] = $value;
}
function & unsetStaticObserver($element)
{
$observer = & base::getStaticObserver();
unset($observer[$element]);
}
}
看了下程序流程,发现问题很多: notify方法调用了getStaticObserver(),getStaticObserver()调用了getStaticProperty(),而getStaticProperty()方法里面$staticProperty都没初始化,这样$observers==null是空的,那等于什么都没执行。
这个代码被调用的地方那么多,难道什么都没执行吗?很困惑,哪位大哥能解除我的疑惑啊!千恩万谢.
解决方案 »
- php水印,加不上去?
- 数组中输入的html字符怎么打印的时候消失了?
- 网站不能访问,请各位大神帮忙看看,在线等。谢谢了
- 关于discuz的问题
- php求助,谢谢
- php如何实现文章的多站同时上传?
- 求一把商品放入购物车的网页特效
- 熟悉ShopEX 模板的来
- linux 下配置PHP mysql时,在启动/usr/local/mysql/bin/mysqld_safe &。。。报错Operating system error number 13 in a file operation.
- php 批量修改数据时 input[type=checkbox]发生的问题
- 抓取ems订单查询状态
- php+js倒计时循环
表示$staticProperty是一个静态变量,它不需要用new来实例化,可以直接如下操作:
print $base::$staticProperty;上面的代码不全吧?base类应该有一个类似setStaticProperty的函数。
不是还有这个吗?是对的哈。注意它里面的
function & setStaticObserver($element, $value)
{
$observer = & base::getStaticObserver();
$observer[$element] = $value;
}
$observer[$element] = $value;就是对$staticProperty进行赋值。