Php 从控制器函数设置全局变量

Php 从控制器函数设置全局变量,php,codeigniter,Php,Codeigniter,我正在从事CI项目,我被困在某个地方。我尝试从函数中设置一个全局变量值,并从其他函数中访问该值。这是我的密码 class Example extends CI_Controller { public $gData = ""; public function userinfo() { //Here i fetch user infomration from database table $userName = "userName";

我正在从事CI项目,我被困在某个地方。我尝试从函数中设置一个全局变量值,并从其他函数中访问该值。这是我的密码

class Example extends CI_Controller {

    public $gData = "";

    public function userinfo() {
        //Here i fetch user infomration from database table 
        $userName = "userName";
        $this->gData = $userName;
    }

    public function getuserinfo() {
        echo $this->gData;
    }

}
userinfo是我在浏览器中打开的实际页面,它从用户表中获取用户的数据。在我看来,我有一个点击按钮,我正在调用ajax,它调用控制器的getuserinfo方法,它假设返回我在userinfo方法中设置的用户名,但不幸的是它不起作用。任何人都会指引我犯错的地方。不允许我使用会话

请尝试以下操作:必须先在全局变量中设置用户名:

class Example extends CI_Controller {

    public $gData = "";

    public function userinfo() {
        //Here i fetch user infomration from database table 
        $userName = "userName";
        $this->gData = $userName;
    }

    public function getuserinfo() {
       $this->userinfo();
        echo $this->gData;
    }

}
或者你可以使用构造函数:我不熟悉CI

class Example extends CI_Controller {

        public $gData = "";

         Public function __construct() { 
         parent::__construct(); 
         $this->userinfo();
      } 

        public function userinfo() {
            //Here i fetch user infomration from database table 
            $userName = "userName";
            $this->gData = $userName;
        }

        public function getuserinfo() {

            echo $this->gData;
        }

    }
编辑答案: 根据注释,如果您不想使用会话,解决方案可以如下所示:

一,。使用userinfo查询创建视图

二,。使用该视图创建模型并编写逻辑。
我想这可能对你有帮助。它不会减慢您的结果。

您可以按照Amitesh所述在构造函数中定义变量,或者您可以更改userinfo方法以仅返回数据,以便getuserinfo方法可以使用它。例如:

class Example extends CI_Controller {

    public function userinfo() {
        //Here i fetch user infomration from database table 
        $userName = "userName";
        return $userName;
    }

    public function getuserinfo() {
        // get the data
        $username = $this->userinfo();
        echo $username;
    }

}

通过调用$this->userinfo,您将运行该方法,并且返回值将可用于同一控制器中进行调用的任何函数

实际上userinfo包含获取代码。如果我从getuserinfo调用userinfo方法,提取代码将再次执行,这是我不想做的,因为用户表包含大量数据,执行这些数据需要时间。提取代码有用户表和大量左连接。每个表都包含大量的数据。因此,我不想多次调用fetch执行。我只提取一次数据,从结果中提取一些数据,并希望在getuserinfo方法中使用它。我会尝试同样的方法。这两个控制器方法服务于不同的请求。整个控制器将被销毁并在其间重新创建,它将不会保留您在其上设置的任何内容。也不应该,因为如果你同时有两个访客会发生什么?!您需要通过URL传递该值。