如何在 codeigniter 的嵌套函数中访问 $this 变量?

How to Access $this variable inside nested functions in codeigniter?

我有一个用于 Nu soap WSDL 的控制器 喜欢:

    class webservice extends CI_Controller
        {
        function index()
        {
              $this->load->library('encrypt');
              $this->load->model('MWSDl');
//...
            function buy($apicode)
            {
                if(!$this->MWSDl->check_gateway($apicode)) //Error occurred  php Cannot find "$this" Variable
            }
//...
            $this->nusoap_server->service(file_get_contents("php://input"));
        }
    }

如何在 buy 函数中访问 $this
我尝试了 global $this 但发生了错误!
错误:
Fatal error: Using $this when not in object context in \controllers\webservice.php on line 9

你对整个概念的理解是错误的。 PHP 不是 Javascript.You 不应该嵌套函数,特别是在使用 OOP 框架时。如果你 运行 函数 index 两次,第二次你可能会得到一个错误,即函数 buy 已经被声明,因为 index 的第一个 运行 将声明函数 buy.

我会将它们声明为 class 成员函数/方法。

class Webservice extends CI_Controller {

        function __construct()
        {
             parent::construct();
             $this->load->library('encrypt');
             $this->load->model('MWSDl');
        }

        function index()
        {
            // do something like
            $apicode = 'xxxxxx';
            $this->buy($apicode);

            //or  what ever else you need to do
        }


        function buy($apicode)
        {
            if(!$this->MWSDl->check_gateway($apicode)) {

                $this->nusoap_server->service(file_get_contents("php://input"));

            }
        }
    }

无需在 codeigniter 中使用全局变量。

如果有帮助请告诉我。

我明白你的问题了。我对 nusoap 也有同样的问题。注册服务时,您必须创建一个功能。因此,在 CI 中,您在 class 函数中创建它,这使得服务函数嵌套在内部,不能被带到外部。

你为什么不试试下面这个呢?我以前一直使用它,与助手等一起使用。它很简单,我已经尝试过并且有效。

将其放入您的嵌套函数中: $ci =& get_instance();

其余的你必须用 $ci 替换 $this 当量。 $ci->some_model->some_function();或 $ci->some_var = 'something';

如果您尝试调用数据库,它也可以工作。

希望对您有所帮助。