看别人的代码看到这样一句
$_ENV['user']->check_mergeuser($username)
$_ENV 这个超级全局变量还能这样调用check_mergeuser方法吗?还是$_ENV变量存储了user这样一个对象,然后调用user对象的check_mergeuser方法,如果是这样的话,为什么我在user对象中找不到check_mergeuser这个方法?
初学PHP不太懂,请指教。

解决方案 »

  1.   

    class Test {
       public $i = 123;
       public function check_mergeuser($username) { echo $username; }
    }$obj = new Test();$_ENV['user'] = $obj;
    var_dump(is_object($_ENV['user']));  //bool(true)$_ENV['user']->check_mergeuser('test'); //test
    调用的是obj对象的check_mergeuser()方法。你可能对$_ENV['user']的理解有点问题,$_ENV是一个数组,'user'是数组的一个键名,通过$_ENV['user'] = $obj;,实际上是在$_ENV数组中创建(或修改)了一个数组元素$_ENV['user'],这个元素保存的值是一个对象(实际上,是这个Test对象的实例$obj的指针,至少在PHP5中是这样的,但是在PHP4中又是另外一回事情)。
      

  2.   

    简单点来说,可以理解为$_ENV['user']是$obj的别名,两者指向的是同一个实例。
      

  3.   

    $_ENV['user']里保存的是某一个类的对象  这个对象作为$_ENV数组的值 而这个值对应的key是user