php5
gggobjGggWebApplication Object
(
    [mObjArray] => Array
        (
            [bbb] => xxxaaaaa
            [111] => 2222
            [module] => GggOopsModule Object
                (
                    [mApp] => GggWebApplication Object
 *RECURSION*
                )            [ggg] => gggobj
        ))php4
gggwebapplication Object
(
    [mObjArray] => Array
        (
            [module] => gggoopsmodule Object
                (
                    [mApp] => gggwebapplication Object
                        (
                            [mObjArray] => Array
                                (
                                    [bbb] => xxxaaaaa
                                    [111] => 2222
                                )                        )                )            [ggg] => gggobj
        ))

解决方案 »

  1.   

    好像没有明白我问的问题 :{
    1.$obj_tmp = & new GggOopsModule($this);
    2.$this->SetObj("module",$obj_tmp); 
    3.$this->SetObj("ggg","gggobj"); 第一行 传给 GggOopsModule类GggWebApplication 当前的对象(注意是引用方式)
    第二行,第三行 增加一个变量或常量然后在 GggOopsModule内部调用传递过来的 GggWebApplication 对像来得到GggWebApplication 定义的变量,如果不是用引用方式,那
    $this->SetObj("module",$obj_tmp); 
    $this->SetObj("ggg","gggobj"); 
    以上两行对 GggOopsModule 类内部是无效的
    由于我传递的是 GggWebApplication 对像的地址,所以在 GggWebApplication 内容设定的值应该可以影响到 GggOopsModule 类.
    就像以下
    <?
    function xxx(&$aaa)
    {
    $aaa="123";
    }$aaa="ggg";$tmp=&$aaa;
    xxx($tmp);
    echo $tmp;
    ?>
    会输出 123而不是 ggg
      

  2.   

    感觉php对类的引用是不是有些问题
      

  3.   

    php5更智能,现在的问题是怎么样在php下也可以实现php5下的效果
      

  4.   

    呵呵,原来是你不会分析呀!

    $mod_tmp=$app_tmp->GetObj("module");

    $mod_tmp是一个GggWebApplication对象请注意到php4与php5的差异(php5是传引用的)
    php5中mApp对象是指向自己的,而php4中的mApp指向一个副本自己有一个mObjArray
    其中并没有ggg项,自然就无输出了你改成这样就有了
    function GggWebApplication($modulePath='') 
    { $this->SetObj("ggg","gggobj"); 
    $obj_tmp = & new GggOopsModule($this);
    $this->SetObj("module",$obj_tmp);  }
      

  5.   

    是我仔细看过的
    为了说明问题例子里我特意把 $this->SetObj("ggg","gggobj"); 
    放在 $obj_tmp = & new GggOopsModule($this); 的后面
    否则大家都知道在php5或php4里输出的肯定是 gggobj另我也特意传递的是mApp 指的地址 
    这样在php4中的也不会是mApp指向一个副本,而是调用的是自身
    否则 &没有起作用。
    我把例子简化。
    <?
    class class1 

    var $mString =  null;
    var $mObj =  null;
    function class1() 
    {
    $this->mString="default";
    $this->mObj = & new class2($this);
    }
    }class class2 
    {
    var $mClass1 =  null;
    function class2(&$tClass1)
    {
    $this->mClass1=$tClass1;
    $tClass1->mString="class2->class2";
    }
    function test()
    {
    $this->mClass1->mString="class2->test";
    }
    }$app_tmp=new class1();
    $app_tmp->mObj->test();
    echo $app_tmp->mString;
    echo "<br>\n";
    print_r($app_tmp);
    ?>
    结果 
    php5:
    class2->test<br>
    class1 Object
    (
        [mString] => class2->test
        [mObj] => class2 Object
            (
                [mClass1] => class1 Object
     *RECURSION*
            ))php4:
    class2->class2<br>
    class1 Object
    (
        [mString] => class2->class2
        [mObj] => class2 Object
            (
                [mClass1] => class1 Object
                    (
                        [mString] => class2->test
                        [mObj] => 
                    )        ))
    也是得到两个不同的答案。小弟实在不明 :(
      

  6.   

    class GggOopsModule
    {
    var $mApp;
    function GggOopsModule(&$app)
    {
    $this->mApp = &$app;//****************************
    $this->mApp->SetObj("bbb","xxxaaaaa");
    $this->mApp->SetObj("111","2222");
    }
    function test()
    {
    $mod_tmp=$this->mApp->GetObj("ggg");
    echo $mod_tmp;
    }}
      

  7.   

    dualface:
    php4 里面,除了参数要用引用,赋值也要是引用。但我的问题还没真正解决。
    先结另开帖.
    谢谢.